Python: Web crawling với thư viện BeautifulSoup

Web crawling là gì?

Web crawling là quá trình tự động thu thập các thông tin từ các trang web và lưu trữ lại để sử dùng vào nhiều mục đích. Chương trình được viết để thực hiện công việc này gọi là web crawler.

Thông thường, một số trang web sẽ cung cấp cho chúng ta một API để lấy dữ liệu từ trang web đó. Tuy nhiên không phải trang web nào cũng cung cấp sẵn API cho chúng ta sử dụng. Do đó chúng ta cần một kĩ thuật để lấy các thông tin từ các trang web đó mà không cần thông qua API.

Webcrawling bằng thư viện BeautifulSoup của Python

Thư viện BeautifulSoup là một thư viện của Python cho phép chúng ta lấy dữ liệu từ HTML đơn giản và hiệu quả.

Trong bài viết này, mình sẽ dùng Python 3 và BeautifulSoup 4 để thực hiện việc crawling đơn giản. Trang web được sử dụng là VnExpress. Mình sẽ lấy các tiêu đề của các tin tức và liên kết tương ứng, sau đó lưu vào file CSV.

Demo

Trước hết chúng ta cần lấy nội dung của trang web và parse nó như sau:

Tiếp theo chúng ta sẽ inspect và lấy thử một tin tức trước. Nhấn chuột phải vào tin tức đầu tiên của trang web và chọn inspect, bạn sẽ thấy thẻ <a> chứa tiêu đề của tin tức, được lồng bên trong thẻ <section class="featured container clearfix">.

Chúng ta có thể lấy ra tiêu đề và liên kết bằng cách dùng phương thức find() như sau:

Chạy đoạn script trên, bạn sẽ được kết quả:

Thay vì chỉ lấy một tin như trên, bạn có thể lấy tất cả các tin tức bên cạnh tin tức vừa lấy như sau bằng cách dùng find_all():

Chạy đoạn script trên, bạn sẽ được:

Trong số các kết quả trên, bạn sẽ thấy có một kết quả không như mong muốn là Title: Góc nhìn - Link: /tin-tuc/goc-nhin/. Đây không phải là một tin tức mà là tiêu đề của một đầu mục, và đường link của nó cũng không phải là dạng đầy đủ. Chúng ta có thể loại bỏ nó bằng cách dùng một hàm để filter nó như sau:

Chạy đoạn script trên, bạn sẽ được kết quả như mong muốn.

Bây giờ mình sẽ lưu nó dưới dạng CSV file. Python đã có sẵn module csv và chúng ta cứ dùng thôi:

Kết

Như vậy là chúng ta đã thực hiện việc crawling đơn giản với vài dòng code. Thực tế việc crawling có thể phức tạp hơn nhiều. Một số điều lưu ý khi crawling:

  • Không spam các trang web. Điều này có thể làm các trang web mà bạn đang crawling bị crash.
  • Việc crawling tùy thuộc vào layout của từng trang web và layout đó có thể thay đổi theo thời gian. Do đó khi layout thay đổi, chúng ta cũng có thể sẽ phải thay đổi code.
  <cite>Nguồn bài viết</cite>
</blockquote>