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:
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: http://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:
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ánhVì 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 newspaper3kVà để 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 = 'https://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?
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:
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 https://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
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 HTTP: 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.
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ệ:
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:
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 |