TL;DR
- Playwright hữu ích khi một trang đã được phê duyệt cần trình diễn JavaScript hoặc tương tác; bắt đầu với API được tài liệu hóa của nguồn hoặc HTML tĩnh khi những thứ đó đã chứa dữ liệu.
- Sử dụng ngữ cảnh trình duyệt, một bộ định vị cụ thể, thời gian chờ điều hướng và kiểm tra chấp nhận ngữ nghĩa. Một tài liệu được tải không nhất thiết là một bản ghi dữ liệu hoàn chỉnh.
- Trích xuất từng mục bên trong container của nó, bảo tồn URL nguồn và thời gian thu thập dữ liệu, và từ chối các trường thiếu thay vì phát minh ra các giá trị mặc định.
- Ràng buộc phân trang và đồng thời trình duyệt; ghi lại bằng chứng trang thất bại khi chính sách cho phép để các thay đổi đánh dấu có thể chẩn đoán được.
- Nstdata Crawl có thể cung cấp Markdown, HTML, liên kết, ảnh chụp màn hình và PDF đã được trình diễn với định tuyến proxy tích hợp, trong khi Playwright vẫn hữu ích cho các tương tác tùy chỉnh.
Playwright Có Thể Làm Gì Trong Quy Trình Web Scraping?
Playwright điều khiển một trình duyệt để một bộ thu thập dữ liệu được phép có thể kiểm tra trạng thái trang đã được trình diễn mà người dùng thấy. Nó có thể điều hướng, chờ các phần tử có ý nghĩa, nhấp, cuộn, đọc nội dung DOM và quan sát phản hồi mạng. Điều này hữu ích cho các danh mục hoặc giao diện được trình diễn ở phía khách, có nội dung xuất hiện sau một hành động. Nó không quyết định liệu một nguồn có thể được truy cập, liệu một trang có phải là thực thể đúng hay liệu dữ liệu được trích xuất có hợp pháp sử dụng hay không.
Nstdata Crawl có thể xử lý giai đoạn trình diễn và chuyển đổi trang khi một phiên Playwright tùy chỉnh là không cần thiết.
Hướng dẫn Playwright Python locator guide mô tả vị trí, văn bản, nhãn và các bộ định vị CSS. Hướng dẫn navigation guide giải thích tại sao sự kiện load của một trang không phải là tín hiệu chung rằng dữ liệu ứng dụng đã sẵn sàng. Sử dụng một bộ đánh dấu nội dung cụ thể của trang và kiểm tra kết quả trước khi trích xuất.
Bạn Cần Gì Trước Khi Bắt Đầu?
Sử dụng một phiên bản Python được hỗ trợ, một trang công khai hoặc đã được phê duyệt đã được xem xét, và một fixture đầu ra dự kiến nhỏ. Cài đặt thư viện Playwright và nhị phân trình duyệt Chromium theo hướng dẫn cài đặt Python chính thức:
python3 -m venv .venv source .venv/bin/activate python -m pip install playwright python -m playwright install chromium
Ghi lại URL trang, tiêu đề hoặc bộ đánh dấu mục mong đợi, định danh mục ổn định, các trường và số lượng trang tối đa. Sử dụng công cụ phát triển để xác nhận xem dữ liệu cần thiết có trong HTML ban đầu, API được tài liệu hóa, hay DOM đã được trình diễn. [Ảnh chụp màn hình: Bảng mạng và bảng phần tử hiển thị dữ liệu cần thiết sau khi trang đã được trình diễn.] Nếu nguồn hạn chế tự động hóa, hãy sử dụng API đã được phê duyệt hoặc yêu cầu sự cho phép thay vì điều chỉnh trình duyệt để tránh kiểm soát.
Làm Thế Nào Để Bạn Lấy Và Xác Thực Trang Đầu Tiên?
Phương Pháp 1: Trình Diễn Một Trang Được Phê Duyệt
Bước 1. Lưu ví dụ này dưới tên first_page.py. example.com là một miền tài liệu ổn định cho việc bắt tay giữa trình duyệt; chỉ thay thế nó sau khi đã kiểm tra một nguồn đã được phê duyệt.
Bước 2. Điều hướng, chờ một tiêu đề, và từ chối một kết quả không mong đợi:
from playwright.sync_api import sync_playwright with sync_playwright() as playwright: browser = playwright.chromium.launch(headless=True) try: context = browser.new_context() page = context.new_page() response = page.goto("https://example.com/", wait_until="domcontentloaded", timeout=30000) if response is None or not response.ok: raise RuntimeError(f"Navigation failed: {response.status if response else 'no response'}") heading = page.get_by_role("heading", level=1) heading.wait_for(state="visible", timeout=10000) title = heading.inner_text().strip() if not title: raise ValueError("Expected heading is empty") print({"source_url": page.url, "title": title}) context.close() finally: browser.close()
Bước 3. Trên mục tiêu thực tế, thay thế kiểm tra tiêu đề bằng một bộ đánh dấu bài viết hoặc sản phẩm mong đợi và lưu lý do từ chối khi nó vắng mặt. response.ok chỉ kiểm tra trạng thái HTTP; một màn hình đồng ý vẫn có thể vượt qua nó.
Làm Thế Nào Để Bạn Trích Xuất Các Bản Ghi Lặp Lại Một Cách Chính Xác?
Phương Pháp 2: Định Nghĩa Các Trường Cho Một Thẻ
Bước 1. Xác định một container mục ổn định và các bộ chọn tiêu đề, giá và liên kết bên trong nó. Tránh chọn tất cả tiêu đề và tất cả giá một cách độc lập: các giá trị thiếu có thể làm thay đổi vị trí của chúng.
Bước 2. Lặp qua các container bằng cách sử dụng một bộ định vị. Các bộ chọn bên dưới chỉ mang tính minh họa và phải được thay thế bằng các bộ chọn quan sát trên trang đã được phê duyệt:
cards = page.locator("article.product-card") records = [] for i in range(cards.count()): card = cards.nth(i) title = card.locator(".product-title").inner_text().strip() price_text = card.locator(".price").inner_text().strip()
href = card.locator("a[href]").first.get_attribute("href") if not title or not price_text or not href: continue records.append({"title": title, "price_text": price_text, "href": href})
**Bước 3.** Giải quyết mỗi `href` so với `page.url`, thêm một ID mặt hàng ổn định và thời gian lấy, và so sánh một mẫu với trang hiển thị. Giữ lại tiền tệ và địa phương hiển thị kèm theo văn bản giá; không chuyển đổi `£12.50` và `$12.50` thành cùng một giá trị. Nếu `cards.count()` bằng không, kiểm tra trang thô và chụp màn hình trước khi thay đổi bộ chọn.
## Làm Thế Nào Để Bạn Xử Lý Nút Tải Thêm?
### Phương Pháp 3: Tiến Lên Một Trạng Thái Tại Một Thời Điểm
**Bước 1.** Xác nhận rằng một nút hiển thị tải thêm mục và xác định một ID mặt hàng ổn định trong mỗi thẻ mới. [Chụp Màn Hình: Nút Tải Thêm và số lượng mục trước khi nhấp.]
**Bước 2.** Ghi lại các ID hiện tại, nhấp nút một lần, sau đó chờ thay đổi ID hoặc số lượng với một thời gian giới hạn. Đặt một số nhấp tối đa, ví dụ mười trong một thử nghiệm. Không sử dụng giấc ngủ cố định làm điều kiện hoàn thành duy nhất.
**Bước 3.** Chỉ lưu trữ các ID mới và dừng lại khi gặp nút bị vô hiệu hóa hoặc vắng mặt, các ID lặp lại, hoặc ngân sách trang. Một danh sách ảo có thể loại bỏ các nút DOM trước đó, vì vậy hãy duy trì bộ `seen_ids` riêng thay vì coi số lượng DOM hiện tại là bao phủ tổng thể.
Hướng dẫn <a href="https://playwright.dev/docs/input" rel="nofollow noopener"><strong>các hoạt động Playwright</strong></a> giải thích việc cuộn một phần tử vào chế độ xem khi một danh sách tải vào độ hiển thị. Hướng dẫn [phân trang và cuộn vô hạn](https://www.nstdata.io/blog/how-to-find-all-webpages-on-a-website) hữu ích cho việc chọn một con đường khám phá trước khi làm việc với trình duyệt.
<a style="margin: 8px; display: inline-block; text-decoration: none; border-left-width: 0px;" href="https://app.nstdata.io/auth/register?utm_source=official&utm_medium=blog&utm_campaign=/playwright-web-scraping-hands-on-tutorial/">
<div style="font-weight:bold; max-width:400px; padding:12px 40px; background:#646AEE; border-radius:5px; border:2px solid #646AEE; color:#fff; font-size:18px;">
Thử Nstdata Miễn Phí →
</div>
</a>
## Làm Thế Nào Để Bạn Chẩn Đoán Kết Quả Rỗng Hoặc Một Phần?
Kiểm tra phản hồi đầu tiên, bảng điều khiển trình duyệt, yêu cầu mạng, chụp màn hình, và DOM sau khi dấu hiệu nội dung nên xuất hiện. Nếu HTML ban đầu thiếu dữ liệu nhưng trình duyệt hiển thị, cần phải thực hiện việc render. Nếu trình duyệt hiển thị một trang đăng nhập hoặc thử thách, dừng lại và xem xét quyền truy cập. Nếu một trường bị thiếu từ các thẻ hợp lệ khác, kiểm tra mẫu trang đó và thêm một lý do từ chối rõ ràng. Một CSV không hàng không phải là một lấy dữ liệu thành công chỉ vì tập lệnh thoát với mã không.
Trong một công việc lặp lại, duy trì bằng chứng thô hoặc đã render nơi quy tắc bảo tồn cho phép, cộng với `source_url`, `fetched_at`, `parser_version`, và `quality_status`. Xử lý lại các mảnh đã lưu sau khi thay đổi bộ chọn. Giữ một phiên bản tốt nhất cuối cùng để một lần làm mới thất bại không thể thay thế một bản ghi chính xác bằng một trang trống. Hướng dẫn [rendering JavaScript](https://www.nstdata.io/blog/javascript-rendering-scraping-at-scale) đề cập đến quản lý tài nguyên trình duyệt ở quy mô lớn hơn.
## Làm Thế Nào Nstdata Có Thể Giúp Khi Việc Bảo Trì Trình Duyệt Trở Nên Lặp Đi Lặp Lại?
[Nstdata Crawl](https://www.nstdata.io/scraping) có thể thu thập và chuyển đổi các trang đã được phê duyệt mà không cần đội ngũ của bạn vận hành đội tàu trình duyệt cho mỗi công việc. Nó hỗ trợ render JavaScript, phát hiện trang giới hạn, và một API cho các công việc một trang hoặc trang web. Playwright vẫn là lựa chọn tốt hơn cho một tương tác cần các cú nhấp tùy chỉnh, trạng thái phiên, hoặc các quyết định DOM vượt ra ngoài cấu hình Crawl đã được tài liệu hóa.
- **Các định dạng sẵn sàng cho LLM:** Markdown hữu ích cho RAG và ngữ cảnh đại lý AI; HTML sạch giữ lại cấu trúc cho các bộ chọn tùy chỉnh; dữ liệu thô giúp điều tra chuyển đổi; các liên kết hỗ trợ khám phá; chụp màn hình và PDF bảo tồn trạng thái trực quan. Hướng dẫn [Crawl API](https://docs.nstdata.io/docs/crawl) mô tả các đầu ra này và mã tham chiếu cho các tác phẩm lớn.
- **Proxy tích hợp sẵn:** Một yêu cầu quản lý tiêu chuẩn thừa hưởng định tuyến proxy mà không cần cấu hình proxy `Host`, `Port`, `Username`, `Password`, hoặc `Protocol` riêng biệt. Điều này giảm bớt công việc triển khai cho việc thu thập được phép, nhưng không loại bỏ hạn chế tỉ lệ nguồn hoặc truy cập.
- **Phạm vi và công việc:** `maxDepth`, `maxPages`, `includeUrls`, và `excludeUrls` giới hạn việc phát hiện đệ quy. Theo dõi tình trạng và lấy trang trước khi tuyên bố bao phủ.
<a style="margin: 8px; display: inline-block; text-decoration: none; border-left-width: 0px;" href="https://app.nstdata.io/auth/register?utm_source=official&utm_medium=blog&utm_campaign=/playwright-web-scraping-hands-on-tutorial/">
<div style="font-weight:bold; max-width:400px; padding:12px 40px; background:#646AEE; border-radius:5px; border:2px solid #646AEE; color:#fff; font-size:18px;">
Thử Nstdata Miễn Phí →
</div>
</a>
## Làm Thế Nào Để Bạn Kết Nối Nstdata Crawl Với Một Quy Trình Làm Việc Playwright?
**Bước 1.** Trong **Bảng điều khiển → Khu vui chơi thu thập**, thử một trang đã được phê duyệt và lấy một khóa API. Giữ nó trong `NSTDATA_API_TOKEN` trên máy chủ.
**Bước 2.** Sử dụng Crawl cho các trang cần thu thập và chuyển đổi, đồng thời giữ Playwright cho những tương tác mà bạn thực sự cần:
```bash
curl --request POST 'https://api.nstdata.io/api/v1/crawl/scrape/submit-sync' \
--header "x-api-key: ${NSTDATA_API_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{"url":"https://example.com/","formats":["markdown","html","screenshot"],"onlyMainContent":true}'
Bước 3. Kiểm tra sự thành công của tác vụ lồng và trạng thái trang, lấy các tài liệu tham khảo nếu được trả về, sau đó thực hiện các kiểm tra chấp nhận giống như trong đường dẫn Playwright của bạn. Không hợp nhất kết quả Crawl chưa hoàn chỉnh với một bản ghi Playwright hợp lệ. Ví dụ này theo các trường đã được tài liệu hóa nhưng cần một khóa tài khoản cho một bài kiểm tra trực tiếp.
Bắt đầu với một trang đã được phê duyệt và một tiêu đề dự kiến đã biết. Sau đó so sánh Playwright cục bộ và Crawl trên cùng một hợp đồng dữ liệu trước khi tăng khối lượng. Đối với các phiên trình duyệt tùy chỉnh liên tục, Trình duyệt Đám mây Nstdata là một sản phẩm riêng để đánh giá.
Bạn Làm Cách Nào Để Biến Ví Dụ Thành Một Công Việc Có Thể Lặp Lại?
Đặt các URL đã được phê duyệt vào hàng đợi với một khóa chuẩn duy nhất, ID nguồn, số lần thử, và thời gian lấy tiếp theo đủ điều kiện. Một tác nhân nên cho thuê một URL, mở một ngữ cảnh, điều hướng, xác thực, ghi một tài liệu thô nếu được phép, sau đó ghi bản ghi đã được chấp nhận hoặc từ chối. Chỉ xác nhận tác vụ sau khi kết quả là bền vững. Nếu tác nhân gặp sự cố, một hợp đồng đã hết hạn cho phép URL được thử lại mà không mất nó một cách im lặng.
Phiên bản logic trích xuất. Lưu parser_version và một băm nội dung với mỗi bản ghi đã được chấp nhận để bạn có thể phân biệt thay đổi trang và thay đổi mã. Một phiên bản trình chọn mới nên được thử nghiệm với các mẫu bình thường và thất bại đã lưu trước khi triển khai. Nếu một lần làm mới trả về màn hình đồng ý hoặc một shell trống, giữ bản ghi tốt nhất cuối cùng và đánh dấu nó là lỗi thời thay vì ghi đè lên nó.
Theo dõi việc sử dụng tài nguyên trình duyệt và hành vi nguồn một cách riêng biệt. Theo dõi các ngữ cảnh mở, bộ nhớ, thời gian điều hướng hết hạn, phản hồi 429, sản lượng bản ghi đã chấp nhận và độ tuổi hàng đợi theo nguồn. Một số lượng yêu cầu cao với sản lượng đã chấp nhận thấp báo hiệu nên dừng lại và kiểm tra một mẫu, không phải tăng đồng thời. Đối với các trang web nhiều trang, định nghĩa ngân sách trang và điểm kiểm tra các liên kết hoặc ID mục đã phát hiện để một lần khởi động lại có thể tiếp tục một cách dự đoán.
Hướng dẫn thu thập dữ liệu trang động cũng cho thấy cách quyết định xem quá trình tự động hóa trình duyệt cục bộ có cần thiết hay không.
Câu hỏi thường gặp
H: Playwright có tự động chờ tất cả dữ liệu trang không?
Không. Nó chờ các điều kiện điều hướng và định vị cụ thể; chọn một dấu hiệu nội dung chứng minh dữ liệu cần thiết có mặt.
H: Playwright có thể thay thế một API nguồn không?
Nó có thể tương tác với một trang, nhưng một API đã được phê duyệt và tài liệu thường đơn giản hơn và ổn định hơn cho các bản ghi có cấu trúc.
H: Nstdata Crawl có thực hiện mọi tương tác tùy chỉnh không?
Đừng giả định như vậy. Kiểm tra trang cụ thể và sử dụng quy trình làm việc của trình duyệt cho những tương tác cần trạng thái hoặc điều khiển tùy chỉnh.
H: Tôi nên lưu trữ những gì với mỗi bản ghi?
Lưu trữ URL nguồn, thời gian quan sát, ID thực thể ổn định, phiên bản phân tích và kết quả xác thực.





