Cấp bậc tác giả:

TRAINING

Hướng dẫn thu thập dữ liệu trang tin tức bất kỳ

Được viết bởi webmaster ngày 09/08/2020 lúc 04:17 PM
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?
  • 0
  • 5944

Hướng dẫn thu thập dữ liệu trang tin tức bất kỳ

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ứ.

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 ra
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ẻ <p>, là các thẻ đoạn văn
  • Thường nó nằm phía dưới thẻ <h1>, 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…

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 = '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)

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é.

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.

Nguồn bài viết: Sưu tầm

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML