Bỏ để qua phần nội dung

Khai thác dữ liệu là gì? Hướng dẫn toàn diện về Python Web Scraping

Trích xuất dữ liệu, còn được gọi là quét web, là quá trình trích xuất dữ liệu từ các trang web theo chương trình. Điều này cho phép bạn thu thập lượng lớn dữ liệu từ web và lưu trữ dữ liệu đó ở định dạng có cấu trúc như CSV hoặc JSON để phân tích thêm và sử dụng trong các ứng dụng khác.

Trong hướng dẫn toàn diện này, chúng tôi sẽ đề cập đến mọi thứ bạn cần biết về trích xuất dữ liệu và quét web bằng Python, bao gồm:

  • Trích xuất dữ liệu là gì và tại sao nó hữu ích?
  • Quét web hoạt động như thế nào?
  • Các phương pháp và công cụ quét web dành cho Python
  • Xây dựng trình quét web Python từng bước
  • Mẹo tránh chặn và xử lý lỗi
  • Cân nhắc pháp lý và đạo đức

Hãy bắt đầu lại từ đầu - trích xuất dữ liệu là gì và tại sao bạn lại muốn thu thập dữ liệu từ các trang web?

Trích xuất dữ liệu là gì?

Trích xuất dữ liệu, quét web, thu thập web - tất cả các thuật ngữ này đều đề cập đến cùng một quy trình tự động thu thập dữ liệu từ các trang web.

Internet chứa một lượng dữ liệu khổng lồ – hàng tỷ trang web chứa đầy nội dung có cấu trúc và phi cấu trúc. Việc trích xuất dữ liệu từ các trang web theo cách thủ công rất tẻ nhạt và tốn thời gian. Các công cụ trích xuất dữ liệu tự động hóa quy trình này bằng cách truy xuất dữ liệu từ các trang web theo chương trình và chuyển đổi dữ liệu đó thành định dạng có cấu trúc như JSON hoặc CSV để phân tích và sử dụng thêm.

Dưới đây là một số ví dụ về những gì bạn có thể làm với dữ liệu được thu thập trên web:

  • Tổng hợp dữ liệu sản phẩm từ các trang web thương mại điện tử để theo dõi giá hoặc nghiên cứu thị trường.
  • Thu thập các bài viết tin tức từ các trang tin tức để đào tạo các mô hình AI.
  • Biên soạn chi tiết liên hệ của công ty để tạo khách hàng tiềm năng.
  • Thu thập dữ liệu cho nghiên cứu học thuật từ các nguồn trực tuyến.
  • Điền nội dung cho công cụ tìm kiếm hoặc cơ sở dữ liệu.
  • Theo dõi giá cả và mức tồn kho của sản phẩm để có cơ hội kinh doanh chênh lệch giá.

Quét web cho phép bạn trích xuất khối lượng lớn dữ liệu mà việc thu thập thủ công không thể thực hiện được. Việc sử dụng dữ liệu cóp nhặt hầu như là vô tận.

Web Scraping hoạt động như thế nào?

Ở mức độ cao, đây là quá trình quét web:

  1. Scraper định vị các URL để truy cập. Đây có thể là danh sách URL được xác định trước hoặc trình quét có thể theo các liên kết đệ quy trên các trang để duyệt qua toàn bộ trang web.

  2. Trình thu thập dữ liệu tải xuống nội dung HTML từ mỗi URL bằng yêu cầu HTTP.

  3. Phần mềm phân tích cú pháp trích xuất dữ liệu cần thiết từ HTML. Công cụ quét xác định dữ liệu hữu ích bằng cách tìm kiếm các phần tử HTML như hàng trong bảng, tiêu đề, liên kết hoặc đoạn văn.

  4. Dữ liệu được trích xuất sẽ được lưu vào cơ sở dữ liệu hoặc tệp đầu ra ở định dạng có cấu trúc như JSON hoặc CSV.

Tóm lại, trình dọn dẹp web tự động truy cập các trang web, tìm nạp HTML, phân tích cú pháp HTML để xác định dữ liệu hữu ích và lưu dữ liệu có cấu trúc để sử dụng ở nơi khác.

Bây giờ chúng ta hãy xem xét một số phương pháp và thư viện phổ biến được sử dụng cho từng bước của quy trình quét web trong Python.

Các phương pháp và công cụ quét web dành cho Python

Python là một ngôn ngữ phổ biến để quét web do có bộ sưu tập lớn các thư viện và công cụ quét. Dưới đây là một số phương thức chính và thư viện Python được sử dụng:

Gửi yêu cầu HTTP

Để tải xuống các trang HTML, trình dọn dẹp Python sử dụng các thư viện yêu cầu HTTP như:

  • yêu cầu – Thư viện HTTP dễ sử dụng, không phụ thuộc ngoài thư viện chuẩn Python.

  • urllib – Thư viện yêu cầu HTTP tích hợp của Python.

  • httpx – Máy khách HTTP đầy đủ tính năng có hỗ trợ các yêu cầu HTTP/2 và không đồng bộ.

Phân tích và trích xuất dữ liệu

Khi bạn đã tải xuống các trang HTML, bạn cần phân tích cú pháp HTML để trích xuất dữ liệu bạn cần. Các cách tiếp cận phổ biến bao gồm:

  • Biểu thức chính quy – Mẫu Regex có thể được sử dụng để trích xuất văn bản phù hợp. Hữu ích cho việc chiết xuất đơn giản.

  • ĐẹpSúp – Thư viện Python phổ biến để phân tích cú pháp HTML và XML. Giúp dễ dàng trích xuất dữ liệu bằng cách sử dụng bộ chọn hoặc điều kiện CSS.

  • lxml – Thư viện phân tích cú pháp XML có hiệu suất cao. Có thể phân tích HTML bị hỏng. Tích hợp với BeautifulSoup.

  • PyQuery – Được mô hình hóa theo jQuery, thư viện này phân tích cú pháp HTML và cho phép lựa chọn và thao tác phần tử DOM.

Tự động hóa trình duyệt

Một số trang web sử dụng JavaScript để tải nội dung một cách linh hoạt. Để xóa các trang này, trình dọn dẹp Python có thể tự động hóa trình duyệt bằng cách sử dụng:

  • Selenium – Khởi chạy và điều khiển một trình duyệt thực sự như Chrome. Có thể xử lý các trang web phức tạp bằng JS.

  • Nhà soạn kịch – Một giải pháp thay thế mới hơn cho Selenium để tự động hóa trình duyệt.

khung quét web hoàn chỉnh

Ngoài ra còn có các khung đầy đủ tính năng cung cấp giải pháp thu thập dữ liệu hoàn chỉnh:

  • Trị liệu – Một framework Scraping phổ biến với tính năng đồng thời không đồng bộ được tích hợp sẵn, các lớp nhện và tích hợp với các thư viện Python khác.

  • con trăn – Một hệ thống quét nguồn mở với giao diện người dùng web và tích hợp với các trình duyệt.

Các thư viện này có thể được kết hợp với nhau khi cần để xây dựng một trình quét web phù hợp bằng Python. Tiếp theo, chúng ta sẽ xem qua một ví dụ sử dụng một số công cụ này.

Xây dựng một trình quét web Python từng bước

Hãy xem cách chúng ta có thể xây dựng một trình quét web đơn giản bằng Python để trích xuất dữ liệu từ một trang web.

Chúng tôi sẽ cạo dữ liệu sách từ phần mở sách.toscrape.com trang web bằng cách sử dụng Yêu cầu và BeautifulSoup. Các bước chúng tôi sẽ đề cập là:

1. Xác định dữ liệu cần thu thập

Đầu tiên, chúng tôi kiểm tra trang web trong trình duyệt và xác định dữ liệu chúng tôi muốn trích xuất. Chúng tôi quyết định loại bỏ danh mục sản phẩm, tên sách, giá và hình ảnh cho mỗi cuốn sách.

2. Kiểm tra cấu trúc trang

Tiếp theo, chúng tôi xem xét cấu trúc HTML cơ bản của các trang bằng công cụ kiểm tra của trình duyệt. Chúng tôi thấy tên sách, giá và hình ảnh trực tiếp bên trong <li> thẻ có lớp "product_pod". Danh mục nằm trong đường dẫn URL của trang.

3. Cài đặt thư viện Python

Bây giờ chúng ta có thể cài đặt các thư viện Python mà chúng ta cần – Yêu cầu tải xuống các trang, Beautiful Soup để phân tích và trích xuất dữ liệu từ HTML:

pip install requests bs4

4. Nhập thư viện

Trong tập lệnh Python của chúng tôi, chúng tôi nhập Yêu cầu và BeautifulSoup:

import requests
from bs4 import BeautifulSoup

5. Xác định URL để Scrap

Chúng ta sẽ bắt đầu bằng cách trích xuất trang đầu tiên của danh mục "Bí ẩn":

url = ‘http://books.toscrape.com/catalogue/category/books/mystery_3/index.html‘

6. Tải xuống HTML trang

Sử dụng Yêu cầu, chúng tôi có thể tải xuống trang HTML:

response = requests.get(url)
html = response.text

7. Phân tích cú pháp bằng BeautifulSoup

Chúng tôi tạo một đối tượng BeautifulSoup từ HTML:

soup = BeautifulSoup(html, ‘html.parser‘)

8. Trích xuất dữ liệu sản phẩm

Inside for vòng lặp, chúng tôi sử dụng BeautifulSoup để trích xuất và in dữ liệu sản phẩm từ trang HTML:

# Extract product category from the URL
category = url.split(‘/‘)[-2]

# Extract all products in the page
products = soup.find_all(‘li‘, {‘class‘: ‘product_pod‘}) 

for product in products:

  # Extract title
  title = product.find(‘a‘).text

  # Extract price 
  price = product.find(‘p‘, {‘class‘: ‘price_color‘}).text

  # Extract image url
  img_url = product.find(‘img‘)[‘src‘]

  print(category, title, price, img_url)

9. Lặp lại cho từng trang

Để trích xuất dữ liệu từ tất cả các trang, chúng tôi lặp qua các URL của trang, tăng dần số trang và lặp lại quy trình thu thập thông tin cho từng trang.

Và thế là xong! Chỉ với một vài dòng mã Python sử dụng Yêu cầu và BeautifulSoup, chúng ta có thể thu thập và trích xuất dữ liệu sản phẩm từ một trang web.

Ví dụ này bao gồm các khái niệm cốt lõi như tạo yêu cầu, phân tích cú pháp HTML và sử dụng bộ chọn để trích xuất dữ liệu. Với các khối xây dựng này, bạn có thể bắt đầu tìm kiếm nhiều loại trang web và dữ liệu.

Tiếp theo, chúng ta hãy xem qua một số mẹo để tạo ra những dụng cụ nạo mạnh mẽ ở cấp độ sản xuất.

Mẹo để quét web mạnh mẽ

Dưới đây là một số phương pháp hay nhất cần tuân theo khi xây dựng công cụ dọn dẹp:

Xử lý lỗi và thử lại

Trang web có thể hiển thị lỗi từ thời gian chờ đến 500 lỗi. Triển khai logic xử lý lỗi như thử lại các yêu cầu không thành công. Các requests.Session object giúp quản lý việc thử lại yêu cầu dễ dàng hơn.

Sử dụng proxy và xoay vòng

Các trang web có thể chặn người dọn dẹp dựa trên địa chỉ IP. Sử dụng proxy và luân chuyển chúng giúp phân phối yêu cầu trên nhiều IP để tránh bị chặn. Thư viện Python như requests giúp việc gửi yêu cầu thông qua proxy trở nên dễ dàng.

Thêm điều tiết, tạm dừng và ngẫu nhiên

Quét ở tốc độ hợp lý để tránh làm quá tải máy chủ. Thêm các khoảng dừng thời gian ngẫu nhiên giữa các yêu cầu và sắp xếp thứ tự ngẫu nhiên để trông giống con người hơn.

Tác nhân người dùng và tiêu đề

Đặt tiêu đề tác nhân người dùng bắt chước trình duyệt web thực để không xuất hiện dưới dạng bot tự động.

Cache và lưu trữ tăng dần

Lưu dữ liệu đã được thu thập dần dần để tiến trình không bị mất trong trường hợp có lỗi. Bộ nhớ đệm tăng tốc độ quét bằng cách tránh tải xuống lại nội dung trang không thay đổi.

Quét không đồng bộ

Quét nhiều trang cùng lúc để tăng tốc độ bằng cách tận dụng các thư viện không đồng bộ như httpx và asyncio.

Khả năng xử lý lỗi mạnh mẽ, tính đồng thời, proxy và bộ nhớ đệm sẽ đảm bảo công cụ quét của bạn thu thập dữ liệu nhanh chóng và đáng tin cậy mà không bị chặn.

Mặc dù hầu hết dữ liệu công khai trên web đều có thể được thu thập nhưng có một số lĩnh vực pháp lý cần xem xét:

Điều khoản dịch vụ – Tránh cạo các trang web nghiêm cấm điều đó trong điều khoản dịch vụ của họ.

Luật bảo vệ dữ liệu – Không thu thập dữ liệu cá nhân mà không có sự đồng ý theo yêu cầu của các quy định như GDPR.

Bản quyền – Không trực tiếp sao chép hoặc đăng lại phần lớn nội dung có bản quyền. Các mẫu nhỏ để phân tích thường được phép sử dụng hợp lý.

Giới hạn tỷ lệ – Tôn trọng giới hạn tỷ lệ và hạn chế mà các trang web đặt trên máy chủ của họ.

Đó cũng là một thực hành đạo đức tốt để minh bạch trong các hoạt động thu thập dữ liệu của bạn thay vì che giấu ý định của bạn. Bất cứ khi nào có thể, sử dụng API chính thức sẽ được ưu tiên hơn là thu thập dữ liệu.

Việc thu thập lượng dữ liệu khiêm tốn từ các trang web công cộng cho mục đích phi thương mại thường được cho phép nhưng luôn tôn trọng các chính sách rõ ràng của trang web.

Tóm tắt các phương pháp hay nhất

  • Sử dụng các thư viện mạnh mẽ như Yêu cầu, BeautifulSoup và Selenium để tìm kiếm các trang web động
  • Thực hiện xử lý lỗi và thử lại để giải quyết vấn đề hỏng trình dọn dẹp
  • Xoay proxy và tác nhân người dùng để phân phối yêu cầu và tránh bị chặn
  • Thêm điều tiết, độ trễ, bộ nhớ đệm và không đồng bộ để cạo hiệu quả trên quy mô lớn
  • Tránh vi phạm điều khoản dịch vụ, vi phạm bản quyền và ghi đè quá mức
  • Khi có thể, hãy sử dụng API chính thức thay vì thu thập dữ liệu

Quét web là một công cụ mạnh mẽ để khai thác lượng dữ liệu khổng lồ trên web. Bằng cách làm theo các phương pháp thu thập dữ liệu tốt nhất và API khi có sẵn, bạn có thể thu thập dữ liệu hữu ích một cách an toàn và hiệu quả.

Python, với nhiều lựa chọn thư viện thu thập dữ liệu hoàn thiện, là một ngôn ngữ lý tưởng để xây dựng các quy trình trích xuất dữ liệu mạnh mẽ.

Tôi hy vọng hướng dẫn này cung cấp cái nhìn tổng quan toàn diện về việc quét web bằng Python. Khả năng thu thập dữ liệu của dự án là vô tận – hãy tiếp tục và trích xuất kiến ​​thức hữu ích từ web!

Tham gia vào cuộc đối thoại

Chúng tôi sẽ không công khai email của bạn. Các ô đánh dấu * là bắt buộc *