41 điểm bởi GN⁺ 2024-02-21 | 5 bình luận | Chia sẻ qua WhatsApp

Ưu điểm của web scraping với Python

  • Cú pháp đơn giản: có thể viết mã nhanh
  • Thư viện tích hợp sẵn: urllib, lxml... hỗ trợ cho việc scraping
  • Thư viện scraping đã rất trưởng thành: Beautiful Soup, Scrapy...
  • Tính đa dụng: có thể dùng để xây dựng pipeline dữ liệu
  • Khả năng tương tác: tích hợp với ngôn ngữ khác tốt và hoạt động hiệu quả khi hiệu năng là yếu tố quan trọng

Các thư viện web scraping của Python

  • BeautifulSoup: phân tích cú pháp HTML/XML, điều hướng và tìm kiếm linh hoạt
  • Scrapy: nhanh và có khả năng mở rộng, hỗ trợ middleware, crawling phân tán
  • Selenium: tự động hóa trình duyệt, xử lý các trang thiên về JavaScript
  • lxml: trình phân tích XML/HTML rất nhanh
  • pyquery: truy cập phần tử HTML bằng cú pháp kiểu jQuery

Chuẩn bị cho việc scraping

  • Khuyến nghị thiết lập môi trường ảo
  • Thư viện cần thiết: Requests, BeautifulSoup, OS

Chọn website mục tiêu để scraping

  • Chọn trang Wikipedia "Danh sách giống chó"
  • HTML được cấu trúc tốt, có nhiều trường dữ liệu và bao gồm hình ảnh

Viết mã scraping

  • Import các thư viện cần thiết
  • Dùng User-Agent để giả lập trình duyệt
  • Tải trang HTML qua requests và kiểm tra tính hợp lệ
  • Phân tích HTML bằng BeautifulSoup
  • Trích xuất dữ liệu bằng CSS selector
  • Tải xuống và lưu hình ảnh

Các thách thức thực tế và thực hành tốt nhất trong web scraping

  • Xử lý nội dung động: dùng Selenium hoặc tích hợp splash của Scrapy
  • Tránh bị chặn: điều chỉnh tốc độ gửi yêu cầu, mô phỏng trình duyệt, xoay vòng user-agent và proxy
  • Giới hạn tốc độ: tôn trọng crawl delay, dùng proxy, tự động điều chỉnh yêu cầu
  • Phân tích HTML phức tạp: dùng parser mạnh như lxml, tăng cường selector

Ý kiến của GN⁺

  • Điểm quan trọng nhất: Python là một ngôn ngữ mạnh mẽ cho web scraping, với cú pháp đơn giản và hệ sinh thái thư viện phong phú, phù hợp cho các dự án scraping ở nhiều quy mô khác nhau.
  • Lý do thú vị: Web scraping là kỹ năng thiết yếu cho việc thu thập và phân tích dữ liệu, và hướng dẫn này cung cấp kiến thức thực tiễn để các kỹ sư phần mềm mới vào nghề có thể áp dụng vào dự án thực tế.
  • Lý do hữu ích: Web scraping có thể được ứng dụng trong nhiều lĩnh vực, và hướng dẫn này giúp phát triển kỹ năng scraping vững thực chiến thông qua các thách thức thực tế và các thực hành tốt nhất.

5 bình luận

 
yangeok 2024-02-26

Playwright thực sự là số một khi cần render JavaScript. Hỗ trợ ngôn ngữ của nó cũng rất rộng.

Nếu ghép với Scrapy thì có vẻ sẽ tạo ra hiệu ứng cộng hưởng khá tốt.

 
ikbzbcg15 2024-02-21

Ây, dạo này thì phải dùng Playwright chứ.

 
bandoche 2024-02-21

Khi thực sự làm scraping như một công việc, thứ phiền phức hơn tưởng tượng lại chủ yếu là xử lý trình duyệt (Chrome WebDriver hay phát sinh lỗi) và vượt chặn (captcha dưới nhiều dạng).

 
GN⁺ 2024-02-21
Ý kiến Hacker News
  • Việc tách biệt crawling web và scraping là rất quan trọng. Crawling là bước tìm URL và lấy nội dung HTML, còn scraping là bước trích xuất dữ liệu có cấu trúc từ HTML. Nếu tách hai bước này, sau đó có thể sửa scraper và nhanh chóng áp dụng lại lên dữ liệu hiện có.
  • Khuyến nghị Playwright như một công cụ scraping web bằng Python. Đây là công cụ tự động hóa trình duyệt rất mạnh và được thiết kế tốt; có sử dụng công cụ CLI shot-scraper để scraping trang web trực tiếp từ dòng lệnh.
  • Việc các công ty SaaS quảng bá sản phẩm của mình trong bài đăng blog là một phần của marketing, nhưng việc giới thiệu vấn đề cho người mới bắt đầu rồi đưa chính sản phẩm của họ ra làm lời giải luôn khá thú vị.
  • Có thể hữu ích khi kiểm tra <domain>/robots.txt, nơi có thông tin hữu ích cho việc scraping website, và trích xuất dữ liệu thông qua metadata có cấu trúc thay vì phân tích các thẻ HTML. Cũng có thư viện để trích xuất phần này thành JSON.
  • Đặt câu hỏi về mức độ phổ biến của scraping web bằng Node.js thay vì Python. Trên npm có các gói được xây dựng tốt để phân tích DOM, và vì dùng JavaScript nên có thể sử dụng các tính năng DOM một cách tự nhiên hơn.
  • Có thể dùng read_html của pandas để lấy liên kết một cách đơn giản. Nhờ đó có thể dễ dàng trích xuất dữ liệu bảng từ website.
  • Đã chán các công việc scraping web lặp đi lặp lại và không mang tính sáng tạo, nên giờ đang thử dùng LLM (Large Language Models) để tự động hóa toàn bộ quy trình. Việc dùng LLM để tạo và điều chỉnh mã scraper nhằm thích nghi với thay đổi của website là khá hiệu quả.
  • Đặt câu hỏi rằng có bao nhiêu “hướng dẫn hoàn chỉnh” về scraping Python thực sự tồn tại.
  • Thiết lập scraping web hiện đại cần có browser agent, và để lấy dữ liệu từ các nền tảng mạng xã hội lớn hoặc các bài viết của The New York Times, có thể phải tự xây dựng công cụ riêng.
  • Thư viện requests-cache hữu ích trong quá trình scraping. Nó thay thế thư viện requests, nhưng lưu mọi phản hồi vào cơ sở dữ liệu SQLite dưới dạng cache nên rất hữu ích khi cần điều chỉnh script lúc bị website giới hạn.
 
xguru 2024-02-21

Điểm quan trọng trong bình luận này là

Việc các công ty SaaS quảng bá sản phẩm của mình trong các bài đăng blog là một phần của marketing, nhưng việc giới thiệu vấn đề cho người mới bắt đầu lần đầu tiên rồi đưa chính sản phẩm của họ ra như giải pháp thì lúc nào cũng khá thú vị.

Chính là ý này. Luôn phải đọc những bài như vậy với việc ghi nhớ rằng ở phần cuối chúng luôn có nội dung quảng bá cho sản phẩm của họ.
Nói ngược lại thì tôi nghĩ các công ty trong nước về cơ bản cũng nên dùng cách này.