Cách thu thập dữ liệu từ các trang web động bằng trình duyệt không giao diện
TL;DR
Sử dụng trình duyệt headless chỉ khi dữ liệu cần thiết xuất hiện sau khi JavaScript chạy hoặc sau một hành động giống như người dùng. Các yêu cầu HTTP trực tiếp nhanh hơn và đơn giản hơn khi trang hoặc điểm cuối dữ liệu đã được ủy quyền đã chứa dữ liệu.
Chờ một điều kiện kinh doanh, không phải một độ trễ chung. Một thùng chứa kết quả có thể nhìn thấy, phản hồi mạng hoàn tất, hoặc trạng thái ứng dụng đáng tin cậy hơn sleep(5000).
Trích xuất các định danh ổn định và xác thực kết quả trước khi lưu lại. Một lần điều hướng thành công không chứng minh rằng các bản ghi mong đợi đã được hiển thị.
Playwright là một lựa chọn mạnh mẽ cho việc cào web headless của các trang web động. Các locator của nó xác định lại các phần tử DOM và các kiểm tra khả thi của nó giảm thiểu các lỗi thời gian phổ biến.
Các quy trình trình duyệt tốn kém hơn so với các khách hàng HTTP. Sử dụng lại các trình duyệt, tách biệt các ngữ cảnh, giới hạn độ đồng thời, và đóng mọi tài nguyên.
Cào có quản lý có thể thay thế các hoạt động của trình duyệt khi cơ sở hạ tầng là nút thắt. Nstproxy Crawl cung cấp cào giới hạn và kết quả đã được hiển thị trong khi ứng dụng vẫn có trách nhiệm xác thực theo miền cụ thể.
Cào web headless làm gì
Cào web headless tải một trang trong một engine trình duyệt mà không hiển thị một cửa sổ bình thường, thực thi JavaScript bên client, và trích xuất dữ liệu DOM hoặc mạng kết quả. Nó phù hợp khi phản hồi HTTP cơ bản chỉ chứa một shell ứng dụng và các bản ghi xuất hiện sau đó. Nstproxy Crawl là một lựa chọn có quản lý khi các nhóm cần các trang đã được hiển thị và phát hiện trang giới hạn mà không trực tiếp vận hành các worker trình duyệt.
Động không phải lúc nào cũng có nghĩa là “cần một trình duyệt.” Nhiều ứng dụng gọi một điểm cuối JSON hoặc GraphQL sau khi tải. Nếu điểm cuối đó là công khai, có tài liệu, và được phép cho mục đích sử dụng dự kiến, gọi nó một cách trực tiếp thường đáng tin cậy hơn. Sử dụng trình duyệt khi việc hiển thị, trạng thái phiên, tương tác, hoặc mã chỉ có trên trình duyệt là thực sự cần thiết.
Trải nghiem Nstproxy - Bat dau dung thu mien phi ngay
Tại sao các trang web động trả về kết quả trống
Một công cụ cào tĩnh thấy phần thân phản hồi được trả về bởi máy chủ. Một ứng dụng được render từ phía client có thể sau đó thực thi JavaScript, lấy dữ liệu, tạo các nút DOM, làm đầy các thành phần, hoặc thay thế trang sau một lần chuyển hướng. Do đó, việc trích xuất ngay sau phản hồi ban đầu có thể trả về một thùng chứa trống.
Các ranh giới thời gian phổ biến bao gồm:
sự kiện DOMContentLoaded ban đầu;
một phản hồi API cụ thể hoàn tất;
một thuộc tính tải thay đổi trạng thái;
kết quả ổn định đầu tiên trở nên nhìn thấy được;
một lô tải vô hạn được thêm vào;
một lần chuyển hướng cập nhật cái nhìn mà không có một lần điều hướng đầy đủ.
Sự kiện load của trình duyệt không phải là tín hiệu hoàn tất phổ biến. Long-polling và phân tích có thể giữ cho mạng hoạt động, trong khi kết quả nhìn thấy có thể xuất hiện trước khi tất cả các tài nguyên hoàn tất.
Các yêu cầu
Ví dụ đã làm sử dụng Node.js, playwright-core, và một executable Chrome đã được cài đặt. Hướng dẫn thư viện Playwright tài liệu cài đặt và mô hình khởi động trình duyệt. Sử dụng gói playwright đầy đủ với các nhị phân trình duyệt được quản lý thường di động hơn; playwright-core hữu ích khi một trình duyệt đã được phê duyệt đã được cung cấp.
Chỉ cào nội dung công khai hoặc được ủy quyền khác. Kiểm tra điều khoản trang web, chính sách robots nếu áp dụng, yêu cầu quyền riêng tư, và tần suất thu thập. Không tự động hóa việc vượt qua đăng nhập, paywalls, hoặc truy cập kiểm soát lừa đảo.
Hướng dẫn chi tiết
Hướng dẫn sử dụng một trang được xây dựng đặc biệt mà chèn hai bản ghi danh mục sau một thời gian chờ ngắn ở phía client. Kịch bản chính xác được chạy với Node.js và playwright-core trên Chrome cục bộ; nó đã trả về hai bản ghi đã được xác thực.
Phương pháp 1: render và trích xuất với Playwright
Bước 1: cài đặt phụ thuộc
Tạo một dự án Node trống và cài đặt thư viện trình duyệt:
npminstall playwright-core
Đối với một môi trường di động, làm theo hướng dẫn cài đặt được duy trì của Playwright và cài đặt các nhị phân trình duyệt được nó hỗ trợ. Ghi lại phiên bản phụ thuộc trong sản xuất và thử nghiệm nâng cấp trình duyệt trước khi triển khai.
Bước 2: khởi động trình duyệt và điều hướng
Tạo scrape.mjs:
import{ chromium }from"playwright-core";const targetUrl = process.env.TARGET_URL;if(!targetUrl)thrownewError("TARGET_URL is required");const browser =await chromium.launch({headless:true,executablePath: process.env.CHROME_PATH});try{const page =await browser.newPage();await page.goto(targetUrl,{waitUntil:"domcontentloaded",timeout:30_000});// Việc trích xuất sẽ tiếp tục ở bước tiếp theo.}finally{await browser.close();}
Giữ đường dẫn executable trong cấu hình triển khai thay vì mã cứng đường dẫn máy của nhà phát triển. try/finally bên ngoài đảm bảo Chrome đóng sau cả thành công và thất bại.
Hướng dẫn định vị viên Playwright giải thích rằng các định vị viên giải quyết dựa trên DOM hiện tại, điều này giúp khi một khung tái tạo lại các nút. Ưu tiên các vai trò khả thi, văn bản, nhãn, thuộc tính dữ liệu ổn định, hoặc một hợp đồng DOM được tài liệu hóa. Tránh các đường dẫn CSS dài dựa trên tên lớp được tạo ra và vị trí của các phần tử.
Không sử dụng độ trễ cố định như chiến lược chính. Một độ trễ hoạt động tại chỗ có thể không hoạt động dưới tải và lãng phí thời gian khi dữ liệu đến nhanh chóng.
Bước 4: trích xuất một sơ đồ ổn định
Chỉ trích xuất những trường mà pipeline cần:
const records =await cards.evaluateAll((elements)=> elements.map((element)=>({id: element.getAttribute("data-id"),name: element.querySelector("h2")?.textContent?.trim()??null,status: element.querySelector('[data-field="status"]')?.textContent?.trim()??null})));if( records.length===0|| records.some((record)=>!record.id||!record.name)){thrownewError("Trang được hiển thị không sản xuất được các bản ghi hợp lệ");}console.log(JSON.stringify(records));
Xác thực là gánh nặng chịu tải. Không có nó, một mẫu từ chối truy cập, trang đồng ý, hoặc bộ chọn đã thay đổi có thể được lưu trữ như một kết quả trống thành công.
Bước 5: chạy bộ thu thập dữ liệu
Đặt URL mục tiêu đã được phê duyệt và đường dẫn trình duyệt trong môi trường, sau đó chạy:
Chờ một phản hồi cụ thể hoạt động tốt hơn khi danh sách được hiển thị có cấu trúc không ổn định nhưng trang gọi một điểm cuối dữ liệu dễ nhận biết. Đăng ký việc chờ trước khi kích hoạt hành động bắt đầu yêu cầu:
Cách tiếp cận này quan sát một yêu cầu được thực hiện bởi trang được ủy quyền; nó không cấp quyền để gọi hoặc đảo ngược kỹ thuật các điểm cuối riêng tư. Xác thực loại nội dung và sơ đồ trước khi sử dụng payload.
Phương pháp 3: phát hiện các thay đổi DOM lặp lại
Đối với giao diện mà không có URL phản hồi ổn định, MutationObserver phía trang có thể phát hiện khi một phần tử mong đợi xuất hiện. Tham khảo tham khảo MDN MutationObserver định nghĩa API để quan sát các thay đổi DOM.
Các bộ định vị Playwright đã bao quát nhiều lần chờ xuất hiện. Sử dụng một bộ quan sát tùy chỉnh chỉ khi ứng dụng yêu cầu một điều kiện cụ thể hơn, chẳng hạn như số lượng kết quả ổn định qua nhiều lần thay đổi. Luôn bao gồm một thời gian chờ và loại bỏ bộ quan sát khi hoàn tất.
Xử lý phân trang và cuộn vô tận
Cuộn vô tận là một máy trạng thái, không phải là một chỉ dẫn để tiếp tục cuộn. Theo dõi một định danh bản ghi ổn định và dừng lại khi một trong những điều kiện này xảy ra:
ứng dụng thông báo không có con trỏ tiếp theo;
không có ID mới nào xuất hiện sau số lần thử nhất định;
đạt đến một số trang hoặc bản ghi tối đa rõ ràng;
xảy ra lỗi về tỷ lệ, quyền hoặc xác thực.
Lưu lại con trỏ hoặc ID bản ghi được chấp nhận cuối cùng để lần thử lại không khởi động lại từ đầu. Loại bỏ trùng lặp theo danh tính miền, không phải theo vị trí của một phần tử trên trang. Hướng dẫn thu thập dữ liệu tự động đề cập đến hành vi lập lịch và làm mới ngoài một lần chạy trình duyệt.
Kiểm soát chi phí trình duyệt và đồng thời
Khởi động một trình duyệt cho mỗi URL tiêu tốn bộ nhớ và thời gian khởi động. Tái sử dụng một quy trình trình duyệt, tạo các ngữ cảnh cô lập cho các phiên không liên quan, và giới hạn số lượng trang đồng thời. Đóng các ngữ cảnh và trang ngay cả sau khi hết thời gian.
Playwright thực hiện các kiểm tra khả năng tương tác trước khi tương tác, như đã mô tả trong tài liệu tài liệu chờ tự động. Những kiểm tra đó giảm tính không ổn định cho các cú nhấp chuột và đầu vào, nhưng chúng không xác thực được kết quả kinh doanh. Một nút có thể nhấp được trong khi tập dữ liệu yêu cầu là rỗng.
Theo dõi thời gian điều hướng, thời gian chờ, số lượng bản ghi đã trích xuất, các lỗi xác thực, trạng thái mục tiêu, và sự cố trình duyệt. Tránh ghi lại thông tin xác thực, cookie phiên, hoặc nội dung phản hồi nhạy cảm.
Khi việc thu thập tự động là lựa chọn tốt hơn
Một trình duyệt tự quản lý hữu ích khi quy trình làm việc yêu cầu các tương tác tùy chỉnh hoặc gỡ lỗi cấp trang chính xác. Một API thu thập dữ liệu được quản lý thường tốt hơn khi gánh nặng thực sự là duy trì công nhân trình duyệt, thử lại, phát hiện trang, kết xuất, và chuyển đổi đầu ra.
Nstproxy Crawl có thể xử lý các trang đơn lẻ hoặc các trang web có giới hạn, kết xuất JavaScript, áp dụng điều khiển trang và đường dẫn, và trả lại các đầu ra được chọn như Markdown, HTML, JSON, liên kết, ảnh chụp màn hình, hoặc PDF. Ứng dụng vẫn phải xác minh rằng nội dung chính xác đã được trả về. Các nhóm xây dựng một pipeline thu hồi web AI nên so sánh chi phí trên mỗi tài liệu được chấp nhận hơn là chi phí trên mỗi yêu cầu.
Hướng dẫn chỉ mục web giải thích ranh giới tiếp theo: canonization, ID ổn định, độ tươi mới, và chia thành các đoạn vẫn là trách nhiệm phía sau sau khi trang đã được thu thập.
Khắc phục sự cố thu thập động không giao diện
Triệu chứng
Nguyên nhân có thể
Phản ứng đúng
Kết quả trống
Việc trích xuất diễn ra trước khi kết xuất
Chờ kết quả hoặc phản hồi dữ liệu hiển thị
Hết thời gian mặc dù trang hiển thị
Điều kiện hoàn thành quá rộng
Chờ phần tử kinh doanh cụ thể
Hồ sơ trùng lặp
Cuộn vô hạn lặp lại các mục
Loại bỏ trùng lặp theo ID nguồn ổn định
Chạy ở máy địa phương, thất bại trong sản xuất
Trình duyệt hoặc phông chữ khác nhau; tài nguyên bị hạn chế
Cố định môi trường, ghi nhật ký chẩn đoán, giảm độ đồng thời
Bộ chọn bị hỏng
Lớp hoặc cấu trúc DOM được tạo ra đã thay đổi
Sử dụng vai trò, nhãn, văn bản, hoặc thuộc tính dữ liệu ổn định
Điều hướng thành công nhưng dữ liệu sai
Lỗi nhẹ, đồng ý, hoặc trang từ chối
Xác minh tiêu đề, các trường mong đợi, và số lượng bản ghi
Kết luận cuối cùng: chờ dữ liệu, sau đó xác minh nó
Thu thập web ẩn danh là thích hợp khi kết xuất JavaScript hoặc tương tác là điều thiết yếu. Playwright cung cấp một bề mặt điều khiển đáng tin cậy, nhưng trình thu thập vẫn phải sử dụng các điều kiện hoàn thành rõ ràng, bộ chọn ổn định, phân trang có giới hạn, dọn dẹp tài nguyên, và xác minh ngữ nghĩa.
Bước tiếp theo là tái tạo một trang mục tiêu với mẫu chấp nhận mười bản ghi và đo độ hoàn chỉnh của kết xuất, độ chính xác của trích xuất, độ trễ, và các danh mục thất bại. Nếu việc bảo trì đội hình trình duyệt là nút thắt cổ chai, hãy kiểm tra Nstproxy Crawl trên cùng các URL được ủy quyền và so sánh các đầu ra đã được chấp nhận.
Chạy trích xuất động mà không quản lý công nhân trình duyệt
Sử dụng Nstproxy Crawl để thu thập các trang có giới hạn, được kết xuất bằng JavaScript trong các định dạng mà pipeline trích xuất hoặc RAG của bạn có thể xác minh và lưu trữ.
Thu thập web không có giao diện sử dụng một động cơ trình duyệt mà không có cửa sổ hiển thị để thực thi JavaScript và trích xuất trạng thái trang kết quả.
Q: Playwright có tốt hơn Selenium cho thu thập động không?
Playwright là một lựa chọn mạnh cho tự động hóa trình duyệt hiện đại, nhưng lựa chọn tốt hơn phụ thuộc vào hỗ trợ ngôn ngữ, cơ sở hạ tầng hiện có, yêu cầu trình duyệt, và chuyên môn của đội ngũ. Đánh giá cả hai trên quy trình làm việc mục tiêu.
Q: Trình thu thập có nên chờ cho mạng không hoạt động?
Thường thì không như đó là điều kiện duy nhất. Phân tích, phát trực tiếp, và polling có thể ngăn cản sự không hoạt động thực sự của mạng, vì vậy hãy đợi phần tử, phản hồi, hoặc trạng thái ứng dụng cụ thể chứng minh rằng dữ liệu đã sẵn sàng.
Q: Tại sao trình thu thập không có giao diện trả về HTML trống?
Trình thu thập thường đọc trang trước khi quá trình kết xuất phía khách hàng hoàn thành hoặc sử dụng một bộ chọn không còn khớp. Ghi lại một snapshot DOM và xác minh контейнер mong đợi sau khi có một đợi rõ ràng.
Q: Thu thập web không có giao diện có hợp pháp không?
Tính hợp pháp phụ thuộc vào dữ liệu, phương thức truy cập, điều khoản hợp đồng, khu vực pháp lý, và cách sử dụng dự kiến. Chỉ thu thập nội dung công khai hoặc được ủy quyền và nhận hướng dẫn luật pháp cho các quy trình nhạy cảm hoặc có rủi ro cao.
Việc trích xuất động thất bại khi quá trình trích xuất chạy trước khi điều kiện hoàn thành thực sự của ứng dụng. Hướng dẫn này xây dựng một quy trình làm việc Playwright đã được kiểm tra và đề cập đến phân trang, xác thực, chi phí trình duyệt và các giải pháp thu thập dữ liệu được quản lý.
Lena Zhou
Sep. 2nd 2026
110M+ IP that voi ti le truy cap thanh cong 99.9%
Phan hoi trung binh ~0.5s cho tac vu dong thoi cao
Chi tu $0.1/GB
Truy cap ngay cac pool proxy residential, datacenter, IPv6 va ISP cao cap.