Thu thập dữ liệu từ web bằng cách dùng web API

Analytics có sẵn ba API cho tất cả người dùng:

  • API thu thập—tùy chỉnh mã theo dõi để đi xa hơn theo dõi chuẩn. Thu thập dữ liệu về các lần mua hàng cho trang web của bạn, nhận báo cáo về hai tên miền phụ trong một chế độ xem, thiết lập định nghĩa kiểu khách truy cập của riêng bạn và nhiều thao tác khác.
  • API quản lý—sử dụng API quản lý Analytics để truy cập hiệu quả vào tài khoản Analytics và dữ liệu chế độ xem dưới dạng nguồn cấp API dữ liệu của Google. Với API quản lý, bạn có thể truy lục hiệu quả tập hợp các chế độ xem cụ thể cho người dùng. Hoặc, bạn có thể truy lục dữ liệu biểu thị mục tiêu được kết hợp với một chế độ xem cụ thể. Cuối cùng, tích hợp việc sử dụng API quản lý với API xuất của bạn để chỉ nhận dữ liệu báo cáo mà bạn cần.
  • API xuất dữ liệu—tạo ứng dụng bằng cách sử dụng dữ liệu Analytics đã có sẵn trong tài khoản Analytics. Ứng dụng có thể sử dụng API để yêu cầu dữ liệu cấp báo cáo từ chế độ xem Analytics hiện tại [nếu được ủy quyền để truy cập vào chế độ xem đó] và truy lục báo cáo dữ liệu được tùy chỉnh cho chế độ xem đã chọn.

Do việc sử dụng API của Analytics yêu cầu bí quyết kỹ thuật, nên chúng tôi giữ lại tất cả các tài liệu tham khảo kỹ thuật trên Google Code Analytics dành cho nhà phát triển.

Thông tin này có hữu ích không?

Chúng tôi có thể cải thiện trang này bằng cách nào?

Trong thời đại kỷ nguyên số như hiện nay, ai cũng biết rằng dữ liệu internet là một nguồn data dồi dào và phong phú nhất. Mà dữ liệu thì lại chẳng khác gì vàng cả. Người ta còn đo sự giàu có của một công ty dựa trên lượng dữ liệu mà công ty đó có cơ mà. Hãy thử điểm qua các công ty công nghệ xem họ có bao nhiêu dữ liệu?

Ví dụ như Facebook, Tiktok hay Twitter, hay như Zalo của Việt Nam. Mục tiêu hàng đầu của họ là tăng số lượng người dùng. Khi họ có nhiều người dùng [nhiều data đó] thì họ có thể dễ dàng kiếm tiền bằng quảng cáo. Vậy nên họ mới nói công ty to là công ty nắm trong tay nhiều dữ liệu chứ.

Nói vĩ mô quá, quay lại vấn đề chính nào. Trong bài hướng dẫn này, mình sẽ chỉ cho bạn cách để kiếm dữ liệu từ các trang tin tức, báo điện tử một cách dễ dàng nhất. Đúng như tiêu đề bài viết này, bạn chỉ mất 5 dòng code để lấy được toàn bộ dữ liệu của một bài báo bất kỳ. Đi vào bài toán thôi nào!

Khoe thành phẩm trước nhé

Để các bạn hứng thú nghiên cứu hơn, mình đã cài sẵn một service nho nhỏ để các bạn test rồi nè.

Truy cập trang demo: //crawler.nguyenvanhieu.vn/

Demo hệ thống thu thập dữ liệu của website tin tức bất kỳ

Nó có thể thu thập dữ liệu của một trang tin tức bất kỳ nào, từ Vnexpress, Dantri, ZingNews, … tới cả các trang tin tức nước ngoài hay thậm chí là trang blog Lập Trình Không Khó này nữa. Các bạn trải nghiệm nhẹ tay nhé, sập server của mình là toi đó.

Mình cũng đã từng chia sẻ một số bài viết khác về thu thập dữ liệu sử dụng Selenium, bạn nào quan tâm qua đây đọc nhé.

Lưu ý đối với độc giả

Bài viết này nhằm mục đích chia sẻ kiến thức, các bạn không nên dùng nó vào các mục đích xấu. Và nếu bạn đang cần dữ liệu, thì cũng đừng thu thập quá nhanh tránh ảnh hưởng đến trang đích nhé.

Và cuối cùng, nếu bạn cần dữ liệu tin tức tiếng Việt, bạn có thể tham khảo một số nguồn dữ liệu tin tức tiếng Việt được public dưới đây, thay vì phải đi kéo từng bài cho mệt.

Mình thu thập dữ liệu như thế nào?

Ý tưởng: Crawl HTML của cái URL cần lấy dữ liệu. Sau khi có HTML, bằng cách nào đó [thuật toán] bạn phải xác định được đâu là phần nội dung bài viết của đống HTML đó. Có 1 vài idea giúp ta phân biệt như sau:

  • Phần nội dung bài viết có tỉ lệ text trên HTML code rất cao. Vì nội dung thì phải nhiều văn bản là đương nhiên rồi.
  • Có nhiều thẻ 

    , là các thẻ đoạn văn

  • Thường nó nằm phía dưới thẻ 

    , tiêu đề của bài

Nếu có điều kiện các bạn hãy thử cài đặt thuật toán này để tự xác định ra vùng nào là vùng nội dung của một bài viết nhé. Còn trong bài này thì mình dùng 1 thư viện có sẵn của Python rồi. Họ cũng dùng ý tưởng này để xác định phần nội dung bài viết thôi.

Mình sử dụng ngôn ngữ Python ở đây. Bởi vì nó có hàng tá thư viện giúp chúng ta từ request lấy HTML, rồi bóc tách nội dung từ HTML, và cả bóc tách nội dung của một trang báo nữa… Quan trọng nhất, mình hay dùng Python và cũng không đến nỗi gà Python lắm.

5 dòng code thần thánh

Vì là có thư viện sẵn rồi, nên chúng ta chỉ việc dùng nó thôi. Thư viện dùng để thu thập dữ liệu và bóc tách nội dung của một trang tin tức bất kỳ mà mình muốn nói đến ở đây là newspaper.

Các bạn hãy sử dụng Python 3, và cài đặt thư viện này qua pip nhé:

pip3 install newspaper3k

Và để thu thập dữ liệu của một url bất kỳ, hãy dùng 5 dòng code sau đây:

from newspaper import Article url = '//vnexpress.net/12-000-nguoi-do-ve-cua-lo-4092705.html' article = Article[url] article.download[] article.parse[] # Xong rồi đấy, giờ lấy data thôi print[article.title] > 12.000 người đổ về Cửa Lò - VnExpress ...

Thư viện này có thể làm được gì cho bạn?

  1. Hỗ trợ chạy đa luồng [multi-thread]
  2. Trích xuất văn bản từ mã HTML
  3. Lấy danh sách ảnh[bao gồm cả ảnh đại diện] của bài báo
  4. Trích xuất từ khóa và các meta data [description, published data, og:title,…]
  5. Và một số thông tin khác, nhưng hầu như nó không work với tiếng Việt.

Chi tiết cách sử dụng, tài liệu bạn xem thêm tại repo github của newspaper nhé.

Mình làm trang demo kia như thế nào?

Việc crawl chỉ có 5 dòng code mình đã để ở trên đó rồi, việc dùng như nào là của các bạn nhé. Còn trang demo mà các bạn vừa trải nghiệm [chưa trải nghiệm thì lên trải nghiệm đi đã nhé] thì mình dùng thêm một ít kỹ thuật viết service thôi. Có một số technique mình sử dụng sau đây:

  • Flask, một framework web của Python, mình có mấy bài hướng dẫn về nó ở đây nè.
  • Và một ít kiến thức về VPS, Bash shell, Nginx + có 1 tên miền để cấu hình cho mọi người truy cập được qua domain. Còn không thì chỉ mình bạn chạy và dùng được, hoặc bạn có thể deploy lên dịch vụ miễn phí Heroku nhé.
  • Source code của trang demo có tại đây nhé, follow mình nếu bạn thấy nó hay nha ^^

Ok, vậy là mình đã giúp bạn thu thập dữ liệu của website tin tức bất kỳ chỉ với 5 dòng code. Quá đơn giản phải không nào.

Hướng phát triển tiếp theo

Đến đây, việc lấy thông tin của một url tin tức bất kỳ không còn là khó khăn nữa rồi. Và để lấy được dữ liệu của một web tin tức thì bạn có thể làm theo hướng sử dụng thuật toán tìm kiếm theo chiều rộng bằng cách tại mỗi trang bạn duyệt qua, tìm tất cả các url trỏ tới bài viết, chuyên mục khác mà bạn chưa duyệt. Bằng cách này bạn có thể crawl cả website.

Tuy nhiên, thực tế luôn phũ phàng, bạn sẽ gặp phải hàng tá vấn đề như bị chặn request, block ip, hoặc có các trang họ giới hạn số request,…

Ngoài ra, phương pháp kể trên không làm việc với các trang load dữ liệu dùng JS. Đối với các trang loại này, ta cần phương pháp khác, dùng Selenium chẳng hạn, hoặc tìm ra API của họ,… Nhìn chung phải tùy theo mỗi trang web ta lại phải sử dụng các kỹ thuật khác nhau. Nhưng đa phần các trang tin tức không dùng JS để load nội dung.

Mình có một repo thu thập dữ liệu social tiếng Việt, nếu bạn cần có thể tham khảo tại //github.com/nguyenvanhieuvn/social-scraper.

Bài viết được chia sẻ bởi blogger Nguyễn Văn Hiếu tại Lập Trình Không Khó. Hi vọng bài viết đem lại cho các bạn nhiều nội dung kiến thức bổ ích!

Hiện nay API nói chung và Web API nói riêng đang được ứng dụng ngày càng nhiều. Kiến trúc ứng dụng hiện đại ngày nay ngày càng phân tán, không phụ thuộc ngôn ngữ đã thúc đẩy việc ứng dụng API.  Vậy API là gì? Nguồn gốc và ưu điểm của nó là như thế nào?

API là các phương thức, giao thức kết nối với các thư viện và ứng dụng khác. Nó là viết tắt của Application Programming Interface – giao diện lập trình ứng dụng. API cung cấp khả năng cung cấp khả năng truy xuất đến một tập các hàm hay dùng. Và từ đó có thể trao đổi dữ liệu giữa các ứng dụng.

Tham khảo thêm: việc làm API lương cao lên đến 3000 USD

  • Web API: là hệ thống API được sử dụng trong các hệ thống website. Hầu hết các website đều ứng dụng đến Web API cho phép bạn kết nối, lấy dữ liệu hoặc cập nhật cơ sở dữ liệu. Ví dụ: Bạn thiết kế chức nằng login thông Google, Facebook, Twitter, Github… Điều này có nghĩa là bạn đang gọi đến API của. Hoặc như các ứng dụng di động đều lấy dữ liệu thông qua API.
  • API trên hệ điều hành: Windows hay Linux có rất nhiều API, họ cung cấp các tài liệu API là đặc tả các hàm, phương thức cũng như các giao thức kết nối. Nó giúp lập trình viên có thể tạo ra các phần mềm ứng dụng có thể tương tác trực tiếp với hệ điều hành.
  • API của thư viện phần mềm hay framework: API mô tả và quy định các hành động mong muốn mà các thư viện cung cấp. Một API có thể có nhiều cách triển khai khác nhau và nó cũng giúp cho một chương trình viết bằng ngôn ngữ này có thể sử dụng thư viện được viết bằng ngôn ngữ khác. Ví dụ bạn có thể dùng Php để yêu cầu một thư viện tạo file PDF được viết bằng C++.

API có thể sử dụng cho computer hardware, or software library, database system, web-based system, operating system. Bên cạnh đó, API cũng có rất nhiều dạng khác nhau, nhưng nhìn chung bao gồm một số đại diện đặc tả cho: data structures, variables, object classes, routines hoặc remote calls.

Tài liệu cho các API thường được cung cấp để tạo sự thuận lợi cho việc triển khai và sử dụng. Web API hiện đang được các doanh nghiệp lớn sử dụng cho khách hàng hoặc chính nội bộ công ty họ.

  • API hiện nay đều tuân thủ theo tiêu chuẩn REST và HTTP, tạo sự thân thiện dễ sử dụng với nhà phát triển. Giúp người dùng dễ dàng truy cập, dễ hiểu hơn. Web API hiện đại dùng cho các đối tượng cụ thể, chẳng hạn như mobile developer với document, version khác nhau.
  • API key: Đây là loại code [string] được truyền tải bởi các chương trình máy tính gọi là API để xác định chương trình, nhà phát triển hoặc người dùng nó tới trang web. Các API key được sử dụng với mục đích nhằm giới hạn, kiểm soát sử dụng API. Chẳng hạn như ngăn chặn sự việc lạm dụng API.

API Key thường hoạt động như một mã định danh duy nhất và mã thông báo bí mật để xác thực và thường sẽ có một bộ quyền truy cập trên API được liên kết với nó. Các API Key có thể dựa trên hệ thống định danh duy nhất toàn cầu [UUID] để đảm bảo chúng sẽ là duy nhất cho mỗi người dùng.

Web API là một phương thức dùng để cho phép các ứng dụng khác nhau có thể giao tiếp, trao đổi dữ liệu qua lại. Dữ liệu được Web API trả lại thường ở dạng JSON hoặc XML thông qua giao thức HTTP hoặc HTTPS.

Web API hỗ trợ restful đầy đủ các phương thức: Get/Post/put/delete dữ liệu. Nó giúp bạn xây dựng các HTTP service một cách rất đơn giản và nhanh chóng. Nó cũng có khả năng hỗ trợ đầy đủ các thành phần URI, request/response headers, caching, versioning, content format.

Với web API, chúng ta sẽ tự động hóa quản lý công việc, cập nhật luồng công việc, giúp tăng năng suất và tạo hiệu quả công việc cao hơn.

API cho phép lấy nội dung từ bất kỳ website hoặc ứng dụng nào một cách dễ dàng nếu được cho phép, tăng trải nghiệm người dùng. API hoạt động như một chiếc cổng, cho phép các công ty chia sẻ thông tin được chọn nhưng vẫn tránh được những yêu cầu không mong muốn.

API có chức năng thay đổi và cập nhật thay đổi theo thời gian thực. Với công nghệ này, dữ liệu sẽ được truyền đi tốt hơn, thông tin chính xác hơn, dịch vụ cung cấp linh hoạt hơn.

Bất kỳ người dùng, công ty nào sử dụng cũng có thể điều chỉnh nội dung, dịch vụ mà họ sử dụng.

Hỗ trợ đầy đủ các thành phần MVC như: routing, controller, action result, filter, model binder, IoC container, dependency injection, unit test.

  1. Đầu tiên là xây dựng URL API để bên thứ ba có thể gửi request dữ liệu đến máy chủ cung cấp nội dung, dịch vụ thông qua giao thức HTTP hoặc HTTPS.
  2. Tại web server cung cấp nội dung, các ứng dụng nguồn sẽ thực hiện kiểm tra xác thực nếu có và tìm đến tài nguyên thích hợp để tạo nội dung trả về kết quả.
  3. Server trả về kết quả theo định dạng JSON hoặc XML thông qua giao thức HTTP/HTTPS.
  4. Tại nơi yêu cầu ban đầu là ứng dụng web hoặc ứng dụng di động , dữ liệu JSON/XML sẽ được parse để lấy data. Sau khi có được data thì thực hiện tiếp các hoạt động như lưu dữ liệu xuống Cơ sở dữ liệu, hiển thị dữ liệu…

Nói thêm về Web API, hiện nay các lập trình viên website thường tự viết API riêng cho dự án của mình. Chủ yếu để thao tác với Database được xây dựng sẵn từ sản phẩm trước đây, nhằm phục vụ cho những tính năng tương đồng ở các dự án khác trong tương lai [Ví dụ Api để lấy thông tin toàn bộ bài viết theo ngày]. Nó còn gọi là tái sử dụng những tài nguyên mà công ty đã xây dựng sẵn hoặc sử dụng API từ các nhà cung cấp như Microsoft hay Google, điển hình và phổ biến nhất có thể kể đến là Google Maps API hoặc Facebook Api…

Mỗi một ứng dụng bất kỳ đều có những ưu nhược điểm riêng, hỗ trợ tốt cho các ứng dụng. Vì vậy mà web API cũng không ngoại lệ:

  • Web API được sử dụng hầu hết trên các ứng dụng desktop, ứng dụng mobile và ứng dụng website.
  • Linh hoạt với các định dạng dữ liệu khi trả về client: Json, XML hay định dạng khác.
  • Nhanh chóng xây dựng HTTP service: URI, request/response headers, caching, versioning, content formats và có thể host trong ứng dụng hoặc trên IIS.
  • Mã nguồn mở, hỗ trợ chức năng RESTful đầy đủ, sử dụng bởi bất kì client nào hỗ trợ XML, Json.
  • Hỗ trợ đầy đủ các thành phần MVC như: routing, controller, action result, filter, model binder, IoC container, dependency injection, unit test.
  • Giao tiếp hai chiều được xác nhận trong các giao dịch, đảm bảo độ tin cậy cao.

Do web API còn khá mới nên chưa thể đánh giá nhiều về nhược điểm của mô hình nay. Tuy nhiên, có hai nhược điểm dễ dàng nhận thấy:

  • Web API chưa hoàn toàn phải là RESTful service, mới chỉ hỗ trợ mặc định GET, POST
  • Để sử dụng hiệu quả cần có kiến thức chuyên sâu, có kinh nghiệm backend tốt
  • Tốn thời gian và chi phí cho việc phát triển, nâng cấp và vận hành
  • Có thể gặp vấn đề về bảo mật khi hệ thống bị tấn công nếu không giới hạn điều kiện kỹ.

Lời khuyên tiếp theo là bạn nên đọc thêm các bài ở dưới đây để cập nhật toàn bộ kiến thức về API:

Xem thêm tuyển dụng IT mới ra trường hấp dẫn trên TopDev

  Call API trong VueJS theo cách thông minh nhất

  Những API thần thánh mà không phải ai cũng biết

Video liên quan

Chủ Đề