Nhà soạn kịch + Trình duyệt Scraping không lỗi: Chromium Cloud qua CDP
Expert in Web Scraping Technologies
Nhà soạn kịch điều khiển một trình duyệt; Trình Duyệt Gạch Bỏ Gạch Cho Ch scraping gỡ cho nó một trình duyệt đã sống trên đám mây, nói ngôn ngữ của Giao Thức DevTools Chrome và mang lại đầu ra cư trú. Lệnh connect_over_cdp của bạn gọi đến một phiên Chromium thực sự qua wss://browser.scrapeless.com/api/v2/browser thay vì một Chrome bạn phải cài đặt, vá lỗi và giữ cho không nổi bật.
Việc hoán đổi đơn lẻ đó — khởi động cục bộ chuyển thành kết nối từ xa — là toàn bộ sự tích hợp. Kịch bản Playwright mà bạn đã biết vẫn giữ nguyên. Điều thay đổi là nơi trình duyệt chạy và địa chỉ IP mà nó thoát ra. Hướng dẫn này kết nối Python Playwright với Trình Duyệt Gạch Bỏ Gạch Cho Ch scraping, hiển thị một trang JavaScript, đọc dữ liệu có cấu trúc từ nó và chỉ định yêu cầu đến một quốc gia cụ thể, với mọi đường mã được thực thi trên điểm cuối trực tiếp.
Tại sao lại chọn Trình Duyệt Gạch Bỏ Gạch Cho Ch scraping cho Playwright
Trình Duyệt Gạch Bỏ Gạch là một phiên Chromium trên đám mây mà bạn truy cập qua CDP, vì vậy Playwright đối xử với nó chính xác như một trình duyệt mà nó tự khởi động. Không có Chrome cục bộ để tải xuống, không có cờ không giao diện để giấu đi, và không có quy trình trình duyệt nào cạnh tranh với bộ nhớ trên máy của bạn. Bạn kết nối, bạn nhận được một đối tượng Browser, và toàn bộ API Playwright hoạt động với nó.
Ba thuộc tính quan trọng cho việc scraping. Phiên này không gian JavaScript phía máy chủ, vì vậy một trang được xây dựng hoàn toàn từ các tập lệnh khách hàng sẽ có DOM đã được điền sẵn. Kết nối mang đầu ra cư trú mà bạn có thể chỉ định đến một quốc gia, vì vậy một trang mà giới hạn nội dung theo địa lý sẽ thấy lưu lượng từ khu vực mà bạn yêu cầu. Và vì trình duyệt là từ xa, máy chạy kịch bản của bạn không bao giờ cần GPU, một màn hình, hoặc một phiên bản Chromium đã vá — phần cục bộ chỉ là một khách hàng websocket giao tiếp với Giao Thức DevTools Chrome.
Điều kiện tiên quyết
Bạn cần Python 3.9 hoặc mới hơn, gói playwright, và một khóa API Scrapeless. Lấy khóa trên kế hoạch miễn phí tại app.scrapeless.com; bảng điều khiển hiển thị nó trên trang khóa API. Khóa được truyền trong URL kết nối dưới dạng tham số truy vấn token, vì vậy hãy giữ nó trong một biến môi trường thay vì một giá trị cụ thể trong mã nguồn của bạn.
Bạn không cần một tệp nhị phân trình duyệt cục bộ. connect_over_cdp mở một websocket đến một trình duyệt đã tồn tại trên đám mây, vì vậy bước thông thường playwright install chromium là tùy chọn ở đây — việc hiển thị diễn ra ở phía Scrapeless của kết nối.
Cài đặt
Cài đặt khách hàng Playwright vào dự án của bạn:
bash
pip install playwright
Đặt khóa của bạn vào môi trường để nó không bao giờ xuất hiện trong mã hoặc nhật ký:
bash
export SCRAPELESS_API_KEY="your_scrapeless_api_key"
Kết nối Playwright với trình duyệt đám mây
Xây dựng URL websocket, sau đó đưa nó cho connect_over_cdp. Điểm cuối là wss://browser.scrapeless.com/api/v2/browser, và nó đọc ba tham số truy vấn: token cho khóa của bạn, sessionTTL cho thời gian sống của trình duyệt tính bằng giây, và proxyCountry cho khu vực đầu ra. Vận chuyển websocket tự nó thực hiện theo giao thức WebSocket, và API kết nối loại trình duyệt của Playwright giao tiếp CDP qua đó:
python
import os
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright
API_KEY = os.environ["SCRAPELESS_API_KEY"]
def scraping_browser_url(proxy_country="US", session_ttl=180):
params = urlencode({
"token": API_KEY,
"sessionTTL": session_ttl,
"proxyCountry": proxy_country,
})
return f"wss://browser.scrapeless.com/api/v2/browser?{params}"
sessionTTL xác định thời gian một trình duyệt sống; một giá trị ngắn là đủ cho một trang, một giá trị dài hơn giữ cho trình duyệt ấm trong một quy trình nhiều bước. proxyCountry nhận một mã hai chữ cái. Mọi thứ khác là Playwright thông thường.
Hiển thị một trang JavaScript và trích xuất
Hướng trình duyệt kết nối đến một trang xây dựng nội dung của nó từ phía khách, và DOM đã được hiển thị sẽ có sẵn khi điều hướng ổn định. Trang demo dưới đây cung cấp một khung rỗng và điền nó bằng JavaScript; một lệnh fetch HTTP đơn giản trả về không có hàng nào, trong khi trình duyệt đám mây trả về tất cả mười hàng vì nó đã chạy các tập lệnh trước — DOM bạn truy vấn là cái mà mô hình phân tích và lập trình HTML sản xuất sau khi thực thi.
python
import os
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright
API_KEY = os.environ["SCRAPELESS_API_KEY"]
def scraping_browser_url(proxy_country="US", session_ttl=180):
params = urlencode({"token": API_KEY, "sessionTTL": session_ttl, "proxyCountry": proxy_country})
return f"wss://browser.scrapeless.com/api/v2/browser?{params}"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(scraping_browser_url())
page = browser.new_page()
page.goto("https://quotes.toscrape.com/js/", wait_until="networkidle")
quotes = page.query_selector_all(".quote")
print("quote blocks on JS-rendered page:", len(quotes))
print("first author:", quotes[0].query_selector(".author").inner_text())
browser.close()
Chạy nó in ra số lượng và bản ghi đầu tiên:
text
khối trích dẫn trên trang được render bằng JS: 10
tác giả đầu tiên: Albert Einstein
Tùy chọn wait_until="networkidle" phù hợp với một trang có nội dung đến thông qua một loạt các yêu cầu do script điều khiển. Trên một trang nặng về phân tích mà không bao giờ yên tĩnh, chuyển sang domcontentloaded cộng với một wait rõ ràng cho selector mà bạn quan tâm, để quá trình chạy không bị treo chờ một mạng không bao giờ nhàn rỗi.
Nhận khóa API của bạn trên gói miễn phí: app.scrapeless.com
Ghi địa điểm đầu ra vào một quốc gia
Thay đổi một tham số và yêu cầu rời khỏi từ một quốc gia khác. Mã proxyCountry chọn khu vực đầu ra cư trú, quyết định IP mà một trang web thấy và, cho các trang bị hạn chế địa lý, nội dung mà nó phục vụ. Đọc một điểm cuối IP-echo từ hai khu vực cho thấy địa chỉ đầu ra thay đổi trong khi script không di chuyển:
python
import os, json
from urllib.parse import urlencode
from playwright.sync_api import sync_playwright
API_KEY = os.environ["SCRAPELESS_API_KEY"]
def scraping_browser_url(country):
return "wss://browser.scrapeless.com/api/v2/browser?" + urlencode(
{"token": API_KEY, "sessionTTL": 180, "proxyCountry": country})
with sync_playwright() as p:
for country in ("US", "GB"):
trình duyệt = p.chromium.connect_over_cdp(scraping_browser_url(country))
trang = trình duyệt.new_page()
trang.goto("https://api.ipify.org?format=json", wait_until="domcontentloaded")
ip = json.loads(trang.inner_text("pre, body"))["ip"]
print(f"proxyCountry={country} -> IP đầu ra đám mây {ip}")
trình duyệt.close()
Hai kết nối rời khỏi từ hai địa chỉ khác nhau, không địa chỉ nào là máy của bạn:
text
proxyCountry=US -> IP đầu ra đám mây 24.93.178.230
proxyCountry=GB -> IP đầu ra đám mây 109.149.20.197
Đó là sự khác biệt thiết thực từ một lần chạy Playwright cục bộ: trình duyệt và IP đầu ra của nó đều nằm ở phía Scrapeless, vì vậy giới hạn tốc độ và quy tắc địa lý gắn với khu vực đã gắn chứ không phải với trạm làm việc của bạn.
Làm việc với phiên
Mọi thứ sau kết nối đều là Playwright tiêu chuẩn, vì đối tượng bạn giữ là một Trình duyệt bình thường. trang.screenshot() ghi lại những gì Chromium trên đám mây đã render, trang.click() và trang.fill() điều khiển các mẫu, và trang.evaluate() chạy JavaScript trong ngữ cảnh trang. Một kết nối duy nhất có thể mở nhiều trang, và việc đóng trình duyệt sẽ kết thúc phiên từ xa; nếu bạn đặt một sessionTTL dài và ngắt kết nối mà không đóng, phiên sẽ tự động hết hạn khi thời gian chạy ra.
Giữ tự động hóa của bạn trong giới hạn đã được nêu rõ của một trang. Đọc điều khoản của mục tiêu và tệp Giao thức loại trừ Robots, chỉ yêu cầu các trang công khai và giữ mức độ song song ở mức độ vừa phải. Việc render một trang trên đám mây không thay đổi những gì một trang cho phép bạn thu thập. Để có cái nhìn rộng hơn về các mẫu khám phá và trích xuất, hướng dẫn về xây dựng một trình thu thập thông tin web từ đầu rất phù hợp với cái này.
Kết luận
Kết nối Playwright với Scrapeless Scraping Browser giữ cho script của bạn và thay đổi thời gian chạy. Bạn vẫn viết goto, query_selector_all, và screenshot; trình duyệt thực hiện chúng là một phiên cloud Chromium với đầu ra cư trú mà bạn có thể gán theo quốc gia, đạt được qua một websocket CDP duy nhất. Hai lần chạy trên — mười trích dẫn từ một trang JavaScript, hai địa chỉ IP đầu ra từ hai khu vực — là toàn bộ hợp đồng: render phía máy chủ, trích xuất bình thường, kiểm soát nơi giao thông ra khỏi. Đọc các khả năng hiện tại trên trang sản phẩm Scraping Browser và kiểm tra giới hạn phiên và đầu ra so với khối lượng của bạn trên trang giá.
Tham gia cộng đồng của chúng tôi để nhận gói miễn phí và so sánh ghi chú với các nhà phát triển khác đang xây dựng tự động hóa trình duyệt: Discord · Telegram.
Câu hỏi thường gặp
Q: Tôi có cần cài đặt Chrome hoặc chạy playwright install để sử dụng Scraping Browser không?
Không. Trình duyệt chạy trong đám mây của Scrapeless, vì vậy connect_over_cdp chỉ cần gói khách hàng playwright. Việc tải xuống trình duyệt cục bộ chỉ quan trọng nếu bạn cũng khởi chạy trình duyệt trên máy của mình.
Q: Các binding của Playwright nào có thể kết nối với nó?
Bất kỳ binding nào của Playwright cung cấp phương thức kết nối qua CDP đều hoạt động, vì điểm cuối sử dụng Giao thức Chrome DevTools. Các ví dụ ở đây sử dụng sync_playwright của Python, và cùng một URL thích ứng với API không đồng bộ và binding Node.
Q: Làm thế nào để yêu cầu xuất phát từ một quốc gia cụ thể?
Đặt tham số truy vấn proxyCountry trong URL kết nối thành mã quốc gia hai chữ cái. Kết nối sau đó thoát từ egress dân cư trong khu vực đó, điều này là những gì mà một trang web geo-gated dựa vào để quyết định nội dung của nó.
Q: Điều này khác gì so với việc chạy Playwright cục bộ?
Một phiên chạy cục bộ khởi chạy Chrome trên máy của bạn và thoát từ IP của bạn. Trình duyệt Scraping chạy Chromium trong đám mây với egress dân cư, vì vậy bạn hoàn toàn bỏ qua trình duyệt cục bộ và điều khiển khu vực thoát thông qua một tham số truy vấn.
Q: Một phiên trình duyệt mở trong bao lâu?
Tham số sessionTTL thiết lập thời gian tồn tại tính bằng giây. Đóng trình duyệt sẽ kết thúc phiên ngay lập tức; nếu bạn ngắt kết nối mà không đóng, phiên sẽ tự động kết thúc khi TTL hết hạn.
Q: Tôi có thể chụp ảnh màn hình và điền biểu mẫu, hay chỉ đọc DOM?
Toàn bộ API của Playwright có sẵn. Bởi vì đối tượng kết nối là một Browser thông thường, page.screenshot(), page.click(), page.fill(), và page.evaluate() đều hoạt động giống như khi bạn làm việc cục bộ.
Q: Tôi nên sử dụng chiến lược chờ nào cho các trang JavaScript?
Sử dụng networkidle cho các trang mà nội dung đến trong một đợt ngắn các yêu cầu, và domcontentloaded cộng thêm một lần chờ rõ ràng cho một selector đã biết trên các trang giữ kết nối nền mở. Mô hình thứ hai tránh chờ đợi trên một mạng mà không bao giờ yên tĩnh.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.



