Crawlee cho Python: Hướng Dẫn Thực Hành về Quy Trình Web Scraping
TL;DR
Crawlee for Python là một khung làm việc cho bộ thu thập thông tin. Nó quản lý các yêu cầu, hàng đợi, trình xử lý và tập dữ liệu xung quanh mã trích xuất của bạn; nó nhiều hơn một trình phân tích cú pháp hay một trình điều khiển trình duyệt.
Bắt đầu với một bộ thu thập HTTP cho các trang tĩnh hoặc được render từ máy chủ. Chọn BeautifulSoupCrawler hoặc ParselCrawler; chuyển sang PlaywrightCrawler chỉ khi nội dung thực sự yêu cầu render trình duyệt.
Tài liệu chính thức hiện tại của Python là phiên bản 1.11 và yêu cầu Python 3.10 trở lên. Ghim phiên bản mà bạn xác thực, đặc biệt khi nâng cấp lưu trữ hoặc hành vi của HTTP-client.
Sử dụng một giới hạn trang và một miền trong danh sách cho phép trong lần chạy đầu tiên. Crawlee loại bỏ các URL bị trùng lặp trong hàng đợi, nhưng bạn vẫn cần xác định phạm vi, chỉ trích xuất dữ liệu được ủy quyền và đo lường tính đầy đủ.
Crawlee cho Python là gì?
Crawlee cho Python là một khung mã nguồn mở để xây dựng các bộ thu thập thông tin web và các quy trình trích xuất dữ liệu. Một bộ thu thập bắt đầu với các URL, gửi mỗi yêu cầu qua một hàng đợi, gọi một trình xử lý cho mỗi trang và lưu trữ các bản ghi đã trích xuất trong một tập dữ liệu. Điều đó tạo ra một cấu trúc dự án cho việc điều phối thu thập mà một cuộc gọi requests.get() thô không cung cấp. Nếu bạn thích một dịch vụ được quản lý cho các URL và tập hợp trang được phép, Nstdata Crawl là một tùy chọn khác; nó không thay thế các trình xử lý tùy chỉnh của Crawlee hoặc logic API cụ thể cho ứng dụng.
Sự phân biệt thực tế là:
Requests + Beautiful Soup: bạn kiểm soát mỗi yêu cầu và phân tích HTML. Tốt cho một nhiệm vụ nhỏ, cố định.
Crawlee: bạn xác định cách xử lý mỗi yêu cầu trong khi khung quản lý một hàng đợi thu thập, các yêu cầu trùng lặp, trình xử lý và lưu trữ.
Trải nghiệm Nstproxy Crawl - Bắt Đầu Dùng Thử Miễn Phí Hôm Nay
Playwright: bạn tự động hóa một trình duyệt. Nó có thể render JavaScript, nhưng nó không tự cung cấp một quy trình thu thập thông tin hoàn chỉnh.
Tài liệu Crawlee Python nhanh chóng hiện liệt kê ba lớp bộ thu thập: BeautifulSoupCrawler, ParselCrawler, và PlaywrightCrawler. Các bộ thu thập HTTP không render JavaScript; bộ thu thập Playwright điều khiển một trình duyệt không đầu.
Crawlee cho Python so với Scrapy và Playwright
Công cụ
Vai trò chính
Hàng đợi yêu cầu và quy trình thu thập
Render JavaScript
Lưu trữ dữ liệu
Khả năng phù hợp
Crawlee cho Python
Khung thu thập Python
Hàng đợi yêu cầu, trình xử lý, định tuyến và lưu trữ tích hợp sẵn
Có, thông qua PlaywrightCrawler
Tập dữ liệu và lưu trữ khóa-giá trị
Các đội Python muốn có một vòng lặp thu thập được quản lý và một lựa chọn HTTP đến trình duyệt
Scrapy
Khung thu thập Python hoàn chỉnh
Lịch trình, trình tải xuống, middleware và đường ống tích hợp sẵn
Không tự nó; thêm một tích hợp trình duyệt khi cần
Đường ống và nguồn mục
Các dự án thu thập lớn, tùy chỉnh cao với một stack Scrapy đã thiết lập
Playwright
Thư viện tự động hóa trình duyệt
Không có hàng đợi thu thập hoặc tập dữ liệu đa mục đích tự nó
Có
Mã ứng dụng của bạn
Thử nghiệm trình duyệt và các trang mà nội dung được ủy quyền phải được render hoặc tương tác
Requests + Beautiful Soup
HTTP client cộng với bộ phân tích HTML
Không có hàng đợi thu thập tự nó
Không
Mã ứng dụng của bạn
Một vài URL đã biết hoặc một bộ phân tích API/trang đơn giản
Một sai lầm phổ biến là so sánh Crawlee và Playwright như thể chúng giải quyết cùng một lớp. Crawlee có thể sử dụng Playwright làm động cơ trình duyệt của nó; Playwright đơn lẻ để lại việc phát hiện URL, loại bỏ trùng lặp, giới hạn công việc, đầu ra và hành vi khởi động lại cho ứng dụng của bạn. Xem <strong tài liệu về nhện Scrapy và tài liệu Playwright cho Python để hiểu rõ hơn về ranh giới của các công cụ đó.
Crawlee cho Python hoạt động như thế nào
Một quy trình thu thập điển hình có bốn phần di động:
URL bắt đầu → RequestQueue → Crawler + Router → Trình xử lý yêu cầu → Tập dữ liệu
Crawler: chọn một triển khai HTTP hoặc dựa trên trình duyệt và chạy công việc.
Yêu cầu /RequestQueue: đại diện cho các trang cần truy cập và giữ danh sách công việc. Crawlee loại bỏ trùng lặp yêu cầu bằng cách sử dụng một khóa duy nhất lấy từ URL theo mặc định.
Router và trình xử lý: quyết định cách xử lý một yêu cầu. Một trình xử lý mặc định đơn lẻ là đủ cho một bộ thu thập ban đầu; nhãn và trình xử lý định tuyến giúp tách biệt các trang danh sách ra khỏi các trang chi tiết sau này.
Tập dữ liệu: lưu trữ các bản ghi có cấu trúc. Lưu trữ khóa-giá trị rất hữu ích cho các vật phẩm như tệp, ảnh chụp màn hình hoặc trạng thái.
Bộ thu thập HTTP so với Bộ thu thập Trình duyệt
Sử dụng một bộ thu thập HTTP khi máy chủ trả về dữ liệu trong phản hồi HTML. Nó tránh overhead của việc khởi động một trình duyệt và thường dễ triển khai hơn. Sử dụng PlaywrightCrawler khi một trang cần rendering bên phía khách để lộ nội dung mà bạn được phép thu thập.
Trước khi chuyển sang trình duyệt, hãy kiểm tra phản hồi ban đầu của trang và kiểm tra xem dữ liệu của nó có sẵn trong HTML hoặc API được tài liệu hóa hay không. Việc trình diễn bằng trình duyệt thêm CPU và bộ nhớ, tệp nhị phân của trình duyệt, thời gian tải trang lâu hơn và nhiều điểm lỗi hơn. Đây không phải là cách để bỏ qua kiểm soát truy cập hoặc thách thức CAPTCHA.
Hàng đợi yêu cầu, định tuyến và tập dữ liệu
Một hàng đợi hữu ích khi các trang liên kết đến nhiều trang khác, hoặc khi một công việc bắt đầu với một danh sách đã biết nhưng phát hiện thêm công việc khi nó chạy. Bộ xử lý yêu cầu có thể trích xuất một bản ghi và đưa các liên kết được phép tiếp theo vào hàng đợi. Hàng đợi xử lý việc loại bỏ trùng lặp URL; mã của bạn vẫn phải xác định những trang nào nằm trong phạm vi và điều gì đủ điều kiện là một bản ghi hợp lệ.
Đối với danh mục thương mại điện tử, một bộ xử lý danh sách có thể trích xuất các thẻ sản phẩm và đưa liên kết trang tiếp theo đơn vào hàng đợi. Một bộ xử lý chi tiết riêng có thể xử lý các URL sản phẩm nếu dự án cần nhiều trường hơn danh sách cung cấp. Giữ cho các sơ đồ danh sách trang và chi tiết trang rõ ràng để một bản ghi danh sách trống không bị nhầm lẫn với một sản phẩm.
Điều kiện tiên quyết và cài đặt
Crawlee cho Python hiện yêu cầu Python 3.10 trở lên. Cài đặt khởi động nhanh là:
Đối với một trình thu thập thông tin hỗ trợ trình duyệt, hãy cài đặt các phụ thuộc trình duyệt Playwright như đã được tài liệu hóa:
playwright install
Ghi chú phụ thuộc trong một tệp khóa để triển khai có thể tái tạo. Tài liệu hiện tại là phiên bản 1.11; hướng dẫn nâng cấp Crawlee 1.0 mô tả các thay đổi về lưu trữ và khách HTTP mặc định, vì vậy đừng giả định rằng một mẫu mã cũ hành xử giống nhau sau một lần nâng cấp lớn.
Bước 1: Xây dựng trình thu thập thông tin Crawlee Python đầu tiên của bạn
Ví dụ này sử dụng Books to Scrape, một danh mục trình diễn. Nó đọc các thẻ sản phẩm từ trang danh sách, chỉ theo liên kết “trang tiếp theo”, giới hạn việc thu thập ở ba yêu cầu, và xuất tập dữ liệu mặc định sang CSV. Chạy các ví dụ trên một trang web dành cho thử nghiệm hoặc một trang mà bạn được phép thu thập.
Cấu hình trình thu thập thông tin và URL bắt đầu
Lưu phần sau dưới dạng books_catalog.py:
import asyncio
from crawlee.crawlers import BeautifulSoupCrawler, BeautifulSoupCrawlingContext
asyncdefmain()->None: crawler = BeautifulSoupCrawler(max_requests_per_crawl=3)@crawler.router.default_handlerasyncdefhandle_page(context: BeautifulSoupCrawlingContext)->None: soup = context.soup
for card in soup.select("article.product_pod"): title_link = card.select_one("h3 a") price = card.select_one(".price_color") availability = card.select_one(".availability")if title_link isNone:continueawait context.push_data({"source_url": context.request.url,"title": title_link.get("title")or title_link.get_text(strip=True),"product_url": title_link.get("href"),"price_text": price.get_text(strip=True)if price elseNone,"availability_text": availability.get_text(" ", strip=True)if availability
elseNone,})# Theo liên kết trang tiếp theo của danh sách; giữ nguyên tên miền.await context.enqueue_links(selector="li.next a")await crawler.run(["https://books.toscrape.com/"])await crawler.export_data(path="books.csv")if __name__ =="__main__": asyncio.run(main())
Sau đó chạy nó:
python books_catalog.py
Giới hạn yêu cầu cố ý giữ cho mẫu nhỏ. Đối với một dự án thực tế, hãy đặt ngân sách trang hoặc yêu cầu phù hợp với phạm vi mà bạn có quyền thu thập, và ghi nhận lý do mà mỗi yêu cầu được chấp nhận.
Trích xuất dữ liệu và lưu kết quả
Mỗi lần gọi context.push_data() thêm một bản ghi vào tập dữ liệu mặc định. Bước xuất sẽ ghi tập dữ liệu đó vào một tệp CSV. Một hàng đại diện có hình dạng như thế này:
{"source_url":"https://books.toscrape.com/","title":"A Light in the Attic","product_url":"catalogue/a-light-in-the-attic_1000/index.html","price_text":"£51.77","availability_text":"In stock"}
Các giá trị hiện tại chính xác có thể thay đổi trên một trang trực tiếp; đoạn mã cho thấy các trường, không phải là một kết quả đã được hứa hẹn. Bảo tồn URL nguồn với mọi bản ghi. Đối với sản xuất, chuẩn hóa các liên kết tương đối với urljoin(), lưu trữ thời gian thu thập, và xác thực rằng mỗi sản phẩm có các trường mà công việc phía dưới của bạn yêu cầu.
Bước 2: Thu thập nhiều trang với hàng đợi yêu cầu
Ví dụ đã sử dụng hàng đợi yêu cầu ẩn của Crawlee: crawler.run() thêm URL khởi đầu, và trình xử lý xếp hàng trang tiếp theo. Khi một trang web có nhiều URL đã biết, hãy sử dụng crawler.run(urls) hoặc API hàng đợi để khởi động công việc. Giới thiệu chính thức của Crawlee giải thích cách hàng đợi yêu cầu và phát hiện liên kết hoạt động.
Phát hiện và Xếp hàng Liên kết
Theo mặc định, context.enqueue_links() giữ nguyên tên máy chủ; một bộ chọn giới hạn các liên kết nào được xem xét. Đối với các trang tài liệu, một lần thu thập có thể sử dụng một bộ chọn như a.sidebar-link và giới hạn trang, sau đó áp dụng các mẫu bao gồm/loại trừ cho các phần.
Chuẩn hóa URL trước khi lưu trữ chúng. Cũng quyết định xem các chuỗi truy vấn có xác định các trang khác nhau hay không: Các bộ lọc và tham số theo dõi có thể tạo ra nhiều URL hiển thị cùng một nội dung. Việc loại bỏ các URL trùng lặp trong hàng đợi giúp với các biến thể URL chính xác, nhưng nó không thể suy ra rằng hai URL có nghĩa khác nhau chứa cùng một bài viết.
Sử dụng Bộ định tuyến cho Các Loại Trang Khác Nhau
Khi các trang danh sách và chi tiết cần các bộ chọn khác nhau, hãy gán nhãn khi bạn xếp hàng URL và đăng ký các trình xử lý tuyến đường riêng biệt. Điều này giữ cho logic trích xuất dễ đọc:
Trình xử lý danh sách: thu thập thẻ, sau đó xếp hàng các liên kết chi tiết.
Trình xử lý chi tiết: trích xuất các trường chỉ tồn tại trên trang sản phẩm.
Trình xử lý lỗi: ghi lại URL không thành công, trạng thái và một danh mục lỗi ngắn gọn.
Đừng đặt tất cả các loại trang vào một điều kiện khổng lồ khi một trình thu thập lớn lên. Các trình xử lý riêng biệt giúp dễ dàng kiểm tra một khung trang theo lược đồ đúng.
Bước 3: Thu thập Dữ liệu từ Các Trang Web Được Render Bằng JavaScript
Chuyển sang PlaywrightCrawler khi nội dung trang được phép còn thiếu trong phản hồi HTTP và chỉ xuất hiện sau khi render phía khách hàng. Khởi động nhanh chính thức cho thấy cùng một giao diện trình xử lý cơ bản với ngữ cảnh Playwright:
Điều này minh họa API trình thu thập của trình duyệt; nó không hứa hẹn rằng một mục tiêu động có thể truy cập. Nếu ứng dụng của bạn tự render sau khi một bộ chọn đã biết xuất hiện, hãy đợi bộ chọn đó trong một trình xử lý cụ thể của trang và đặt thời gian chờ. Tránh ngủ lâu cố định khi một điều kiện sẵn sàng rõ ràng có sẵn. Đừng sử dụng tự động hóa trình duyệt để vượt qua một thách thức hoặc hạn chế truy cập.
Bước 4: Làm Sạch và Xác Thực Dữ liệu Đã Trích Xuất
Một trình thu thập có thể hoàn thành thành công trong khi tạo ra các bản ghi không đầy đủ. Thêm các kiểm tra mà làm thất bại công việc hoặc chuyển hướng các bản ghi đến một tập dữ liệu xem xét khi các trường yêu cầu còn thiếu:
Yêu cầu một định danh ổn định hoặc URL nguồn.
Từ chối một bản ghi sản phẩm không có tiêu đề; giữ giá có thể null nếu trang không cung cấp.
Chuẩn hóa khoảng trắng, tiền tệ, và URL tương đối trong một bước biến đổi riêng biệt.
Loại bỏ trùng lặp dựa trên một khóa kinh doanh như URL sản phẩm chính, không chỉ dựa trên tiêu đề.
Lưu các khung HTML thô hoặc đại diện để kiểm tra hồi quy trình phân tích.
Theo dõi các URL đã phát hiện, URL đã xử lý, bản ghi hợp lệ và các yêu cầu không thành công riêng biệt.
Hướng dẫn lưu trữ của Crawlee tài liệu các tập dữ liệu và lưu trữ khóa-giá trị. Giữ các đối tượng lớn ra khỏi một hàng trong cơ sở dữ liệu quan hệ; lưu một tham chiếu hoặc khóa đối tượng thay vào đó.
Bước 5: Đánh giá Thông lượng và Độ tin cậy
Đừng ước lượng thông lượng sản xuất từ một lần chạy hướng dẫn ba trang. Đánh giá cùng một tập URL được ủy quyền trên cùng một máy và ghi lại:
Đo lường
Tại sao nó quan trọng
Bản ghi hợp lệ / trang yêu cầu
Tách chất lượng trích xuất ra khỏi thành công HTTP
Độ trễ trang trung vị và p95
Ghi lại các trang chậm mà không che giấu đuôi
Yêu cầu mỗi phút
Đo thông lượng dưới độ đồng thời đã chọn
CPU và bộ nhớ cao điểm
Các trình thu thập trình duyệt có thể có hồ sơ tài nguyên khác nhau
Số lần thử lại và thất bại
Tiết lộ các mục tiêu mong manh hoặc vấn đề cấu hình
Byte đầu ra và tăng trưởng lưu trữ
Quan trọng cho các công việc dài hạn hoặc nặng nề về đối tượng
Chạy một phiên thử nghiệm nhỏ, kiểm tra các mẫu một cách thủ công, sau đó tăng dần khối lượng. Đặt một giới hạn số yêu cầu tối đa, độ đồng thời theo miền, và thời gian chờ công việc trước khi chuyển sang thực thi theo lịch.
Bước 6: Triển khai một Công việc Python của Crawlee
Để thực hiện một cuộc thu thập HTTP theo lịch nhỏ, hãy đóng gói môi trường Python và lưu trữ đầu ra, sau đó chạy script từ một container hoặc bộ lập lịch công việc. Một lần chạy với trình duyệt cũng cần các nhị phân trình duyệt tương thích và các phụ thuộc hệ thống; hãy bao gồm chúng trong hình ảnh và kiểm tra chính xác hình ảnh cơ sở triển khai.
Lập kế hoạch cho việc khởi động lại quy trình và tính idempotency. Gán một ID cho mỗi lần chạy, lưu giữ các URL nguồn và dấu thời gian, và đảm bảo các ghi dữ liệu hạ nguồn an toàn để lặp lại. Nếu một lần thu thập phải tiếp tục từ hàng đợi đã được lưu trữ sau một sự cố, hãy kiểm tra hành vi đó với cấu hình lưu trữ mà bạn dự định triển khai thay vì giả định một lần chạy cục bộ chứng minh tính bền bỉ của đám mây.
Khi nào sử dụng Crawlee cho Python so với API thu thập được quản lý
Crawlee là lựa chọn mạnh mẽ khi bạn cần logic trích xuất tùy chỉnh, muốn kiểm soát lịch trình và lưu trữ, và có thể vận hành trình thu thập dữ liệu tự mình. Một API thu thập được quản lý có thể giảm bớt công việc của cơ sở hạ tầng trình duyệt và trả về nội dung trang đã chuẩn hóa, nhưng bạn vẫn sở hữu chính sách thu thập, xác thực dữ liệu và xử lý hạ nguồn.
Crawl Nstdata mô tả việc thu thập URL hoặc cấp độ trang với các giới hạn trang có thể cấu hình và đầu ra như Markdown và HTML. Nó hữu ích khi ứng dụng cần nội dung trang thay vì một mã nguồn trình thu thập tùy chỉnh. Nó không phải là công cụ phù hợp cho mọi nhiệm vụ: sử dụng Crawlee khi yêu cầu cần kiểm soát tùy chỉnh hoặc tự lưu trữ; sử dụng dịch vụ được quản lý khi giảm thiểu công việc của trình duyệt và hạ tầng thu thập là quý giá hơn. Các hướng dẫn liên quan đến Nstdata đề cập đến các trang được render bằng JavaScript trong Python, thu thập không đầu cho các trang web động, và thu thập dữ liệu tự động.
Kết luận
Crawlee cho Python cung cấp cho một dự án Python một vòng lặp thu thập có thể được tái sử dụng: các yêu cầu vào hàng đợi, các trình xử lý trích xuất bản ghi, và một tập dữ liệu lưu trữ đầu ra. Bắt đầu với một trình thu thập HTTP, làm cho phạm vi URL cho phép rõ ràng, và chỉ thêm Playwright khi việc render là cần thiết. Một giới hạn trang và kiểm tra chất lượng dữ liệu hữu ích hơn là một cuộc thu thập lớn im lặng lưu trữ các hàng không hoàn chỉnh.
Trải nghiệm Nstdata — Bắt đầu dùng thử miễn phí ngay hôm nay
Nếu bạn thích dịch vụ được quản lý cho việc thu thập URL và trang đã được phép, hãy xem xét các đầu vào và đầu ra đã được tài liệu của Nstdata Crawl trước khi thử nghiệm một khái niệm.
Crawlee là mã nguồn mở và tài liệu của nó mô tả nó là miễn phí. Bạn vẫn phải trả cho việc tính toán, thời gian chạy trình duyệt, lưu trữ, và cơ sở hạ tầng mà bạn vận hành.
Q: Crawlee có thể render JavaScript không?
Có. Crawlee cho Python bao gồm PlaywrightCrawler cho các trang dựa trên trình duyệt. BeautifulSoupCrawler và ParselCrawler sử dụng các phản hồi HTTP và không render JavaScript.
Q: Crawlee có tốt hơn Scrapy không?
Nó phụ thuộc vào dự án. Crawlee cung cấp một hàng đợi tích hợp, các trình xử lý, và quy trình lưu trữ với lựa chọn trình thu thập dữ liệu HTTP-to-Playwright; Scrapy là một framework trưởng thành với scheduler, middleware, và pipelines riêng của nó. So sánh các tích hợp mà nhóm của bạn đã vận hành.
Q: Crawlee tự động tránh các URL trùng lặp không?
Hàng đợi yêu cầu của nó loại bỏ trùng lặp các yêu cầu bằng cách sử dụng một khóa độc nhất phát sinh từ URL mặc định. Bạn vẫn nên chuẩn hóa các URL và loại bỏ trùng lặp các bản ghi bằng định danh doanh nghiệp mà ứng dụng của bạn cần.
Q: Làm thế nào để tôi xuất dữ liệu từ Crawlee?
Mẫu khởi đầu nhanh lưu trữ các bản ghi trong một tập dữ liệu dưới lưu trữ cục bộ. API trình thu thập cũng cung cấp một phương pháp xuất, chẳng hạn như crawler.export_data(path="books.csv"), cho các định dạng được hỗ trợ bởi phiên bản đã cài đặt.
Ivy Lin
Oct. 19th 2026
Thu thập toàn bộ trang web chỉ với một yêu cầu API
Tỷ lệ thành công 99,8% với kết xuất JavaScript
Nhận dữ liệu sạch, sẵn sàng cho LLM ở nhiều định dạng
Chuyển mọi trang web thành Markdown, HTML, JSON, liên kết, PDF và hơn thế nữa mà không cần quản lý hạ tầng thu thập dữ liệu.