Đánh giá Bright Data và Các lựa chọn thay thế: Di chuyển các công cụ thu thập dữ liệu của bạn
Scraping and Proxy Management Expert
TL;DR:
- Bright Data định tuyến hai sản phẩm khác nhau qua một điểm cuối duy nhất. Web Unlocker và SERP API đều POST đến
https://api.brightdata.com/request; chỉ cózonetrong thân yêu cầu quyết định cái nào sẽ trả lời. Do đó, việc chuyển đổi bắt đầu bằng việc phân tách các vùng, không phải bằng cách thay đổi tên miền. - Ba điều gặp sự cố trong một cổng đơn giản, và không cái nào trong số đó tạo ra lỗi hữu ích: tiêu đề xác thực thay đổi tên, phản hồi đến dưới dạng một phong bì JSON thay vì mã nguồn thô, và hai giao diện nằm trên các phiên bản API khác nhau.
- Tự động hóa trình duyệt là phần dễ dàng. Cả hai sản phẩm đều nói chuyện bằng CDP, vì vậy mã Playwright và Puppeteer vẫn hoạt động dù URL kết nối đã thay đổi. Thông tin đăng nhập di chuyển từ userinfo của URL sang tham số truy vấn.
- Có một hạn chót bắt buộc câu hỏi này. FAQ của Bright Data cho biết các chứng chỉ trên các cổng proxy
22225và33335sẽ hết hạn vào ngày 25 tháng 9 năm 2026, và người gọi phải chuyển sang cổng44445. Mọi sự tích hợp đều phải được mở trước thời điểm đó. - Bắt đầu miễn phí: bảng điều khiển Scrapeless phát hành một khóa hoạt động với mọi giao diện được mô tả ở đây.
Bright Data Là Gì
Bright Data bán dịch vụ thu thập dữ liệu web dưới dạng một bộ sản phẩm có thương hiệu riêng biệt ngồi trên một mạng proxy. Ba sản phẩm trong số đó quan trọng khi bạn di chuyển mã scraper:
- Web Unlocker API — bạn cung cấp một URL, nó xử lý chuyển đổi proxy, dấu vân tay và thách thức, và trả lại trang.
- SERP API — quy trình yêu cầu giống như vậy hướng đến các công cụ tìm kiếm, nơi bạn cung cấp một URL tìm kiếm đã được xây dựng hoàn chỉnh.
- Browser API — một Chrome được lưu trữ mà bạn điều khiển qua Giao thức DevTools của Chrome bằng Playwright, Puppeteer hoặc Selenium.
Sự thật cấu trúc quan trọng, và là điều định hình mọi sự di chuyển: hai sản phẩm đầu tiên là cùng một điểm cuối HTTP. Theo tài liệu Web Unlocker của Bright Data và tài liệu SERP API, cả hai sản phẩm đều chấp nhận một POST tới https://api.brightdata.com/request mang theo zone, url và format. Giá trị zone là thứ định tuyến cuộc gọi.
Điều này thuận tiện khi bạn đang sử dụng Bright Data và khó chịu khi bạn rời đi, vì cơ sở mã của bạn có thể có một trợ giúp yêu cầu mà hành vi của nó phụ thuộc vào một chuỗi cấu hình.
Các Tính Năng Chính
Trên ba sản phẩm đó, bề mặt yêu cầu là nhỏ và nhất quán:
- Xác thực là một khóa API tài khoản đơn giản được gửi dưới dạng
Authorization: Bearer <key>. - Định tuyến là theo
zone, được cấu hình trong bảng điều khiển thay vì trong yêu cầu. format: "raw"trả về thân phản hồi của mục tiêu trực tiếp.- Nhắm mục tiêu theo địa lý, ghim phiên và các tác nhân người dùng di động được diễn đạt trong tên người dùng proxy, sử dụng hậu tố như
-country-<code>và-session-<id>. - Browser API kết nối tại
wss://<username>:<password>@brd.superproxy.io:9222, theo tài liệu tham khảo cấu hình Browser API của Bright Data.
Sản Phẩm và Giá Cả
Bright Data tính giá theo từng sản phẩm và từng vùng, vì vậy một tài khoản đơn thường có nhiều vùng với các mức giá và giới hạn riêng biệt. Mô hình đó là lý do tại sao việc chuyển đổi hiếm khi chỉ là một thay đổi đơn giản: vùng cũng đóng vai trò là ranh giới thanh toán và cấu hình, vì vậy việc di chuyển ra ngoài đó ảnh hưởng đến việc phân bổ chi phí cũng như định tuyến.
Scrapeless tính giá theo yêu cầu dựa trên một khóa, với bề mặt được chọn bởi điểm cuối mà bạn gọi thay vì bởi một đối tượng bảng điều khiển. Các số liệu hiện tại cho cả hai bên đều có trên các trang giá của họ; hướng dẫn này cố ý lập bản đồ các cơ chế thay vì trích dẫn các mức giá có thể thay đổi.
Hiệu Suất và Sự Phù Hợp
Mạng lưới proxy của Bright Data rất lớn và tỷ lệ thành công trong việc mở khóa các mục tiêu khó là lý do mà hầu hết các đội nhóm chọn nó ngay từ đầu. Không có gì trong hướng dẫn này lập luận rằng sản phẩm không hoạt động.
Những gì thúc đẩy các đội nhóm thường là cấu trúc hơn là kỹ thuật: cấu hình theo vùng trôi dạt, thanh toán khó quy theo một công việc cụ thể, và chi phí hoạt động để giữ nhiều vùng cùng nhau. Đó là những điều kiện mà "mở cổng mã" trở thành một câu hỏi thực sự.
Lựa Chọn Scrapeless
Scrapeless chia nhỏ cùng một công việc qua các bề mặt được chọn theo URL thay vì theo cấu hình:
- Universal Scraping API —
POST https://api.scrapeless.com/api/v2/unlocker/requestcho việc lấy trang không bị chặn. - Scraper API —
POST https://api.scrapeless.com/api/v1/scraper/requestvới mộtactorđặt tên bề mặt mục tiêu, trả lời ngay với các trường đã phân tích. - Scraping Browser — một điểm cuối CDP tại
wss://browser.scrapeless.com/api/v2/browser, với khóa được truyền qua một tham số truy vấntoken.
Một ключ cho cả ba. Không có đối tượng vùng, điều này loại bỏ việc quay vòng bảng điều khiển nhưng cũng có nghĩa là việc phân tách phải xảy ra trong mã của bạn trong quá trình cổng.
Nơi Bright Data vẫn có ưu thế
Ba điều thực sự dễ dàng hơn để thực hiện trên Bright Data hơn là sau khi cổng:
- Mô hình vùng thực sự tiện lợi khi nhiều công việc chia sẻ một điểm gọi và bạn muốn thay đổi hành vi mà không cần triển khai.
- Selenium được hỗ trợ cho API Trình duyệt. Trình duyệt thu thập thông tin không cần mã (Scrapeless Scraping Browser) chỉ hỗ trợ CDP, vì vậy một bộ dựa trên Selenium cần được viết lại trên Playwright hoặc Puppeteer thay vì chỉ định lại.
- Các bộ sửa đổi tên người dùng proxy như
-country-và-session-biểu thị geo và gán phiên mà không chạm vào thân yêu cầu, điều này được một số mã nền tảng dựa vào rất nhiều.
Nơi mô hình tốn kém cho bạn
- Một điểm cuối, hai sản phẩm có nghĩa là phân tích tĩnh không thể cho bạn biết một cuộc gọi cụ thể thực sự làm gì mà không giải quyết vùng.
- Cấu hình sống bên ngoài kho lưu trữ, vì vậy một thay đổi vùng không thể thấy được trong việc xem xét mã và
git blame. - Thay đổi cổng và chứng chỉ rơi vào bạn. FAQ chung của Bright Data cho biết các chứng chỉ cũ trên các cổng
22225và33335sẽ hết hạn vào ngày 25 tháng 9 năm 2026 lúc 00:00 UTC, và những người gọi vẫn trên các cổng đó phải hoàn thành việc di chuyển đến cổng44445trước ngày đó.
Triển khai: Cổng mã
Đây là phần mà các tài liệu di cư khác bỏ qua. Mỗi tiểu mục dưới đây là một sự khác biệt thực sự mà tạo ra kết quả sai hơn là một lỗi rõ ràng.
Điểm cuối và Bản đồ tham số
| Mối quan tâm | Bright Data | Scrapeless |
|---|---|---|
| Lấy trang không bị chặn | POST https://api.brightdata.com/request · {"zone","url","format":"raw"} |
POST https://api.scrapeless.com/api/v2/unlocker/request · {"actor":"unlocker.webunlocker","input":{"url","js_render"}} |
| Kết quả tìm kiếm | điểm cuối giống nhau, vùng SERP · url là một URL tìm kiếm đã được xây dựng trước |
POST https://api.scrapeless.com/api/v1/scraper/request · {"actor":"scraper.google.search","input":{"q","gl","hl"}} · trả về kết quả đã được phân tích nội tuyến |
| Tự động hóa trình duyệt | wss://<user>:<pass>@brd.superproxy.io:9222 |
wss://browser.scrapeless.com/api/v2/browser?token=<key> |
| Xác thực | Authorization: Bearer <key> |
x-api-token: <key> |
| Định tuyến sản phẩm | zone trong thân |
điểm cuối cộng với actor |
| Thân thành công | thân phản hồi của mục tiêu | phong bì JSON; đánh dấu bên trong data |
Lỗi 1: Tiêu đề xác thực thay đổi tên
Nỗ lực đầu tiên không thành công phổ biến nhất đổi vị trí của host và chìa khóa nhưng giữ nguyên tiêu đề. Bright Data sử dụng Authorization: Bearer; Scrapeless sử dụng x-api-token. Một yêu cầu chỉ chứa tiêu đề cũ là không được xác thực, và sự cố trông giống như một vấn đề xác thực thay vì một vấn đề tên tiêu đề.
bash
# Bright Data — illustrative, from the vendor's published example
curl -H "Content-Type: application/json" \
-H "Authorization: Bearer ${BRIGHTDATA_API_KEY}" \
-d '{"zone":"YOUR_ZONE_NAME","url":"https://example.com","format":"raw"}' \
https://api.brightdata.com/request
bash
# Scrapeless — the same intent
curl -sS -X POST "https://api.scrapeless.com/api/v2/unlocker/request" \
-H "x-api-token: ${SCRAPELESS_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"actor":"unlocker.webunlocker","input":{"url":"https://example.com","js_render":false}}'
Lỗi 2: Phản hồi là một phong bì
Với format: "raw" Bright Data trả lại thân của mục tiêu, vì vậy những người gọi thường làm response.text và phân tích nó. Scrapeless trả lời với một đối tượng JSON và đưa đánh dấu vào data.
Một cổng chỉ thay đổi URL và tiêu đề sẽ phân tích một chuỗi JSON như thể nó là HTML. Các bộ chọn không trả về gì cả, không có ngoại lệ nào được nêu ra, và bản ghi công việc có kết quả rỗng. Cách sửa chỉ là một dòng, nhưng chỉ nếu bạn biết phải thực hiện nó.
python
import os
import requests
KEY = os.environ["SCRAPELESS_API_KEY"]
def fetch(url: str, js_render: bool = False) -> str:
"""Return page HTML. The envelope is unwrapped here, once."""
response = requests.post(
"https://api.scrapeless.com/api/v2/unlocker/request",
headers={"x-api-token": KEY, "Content-Type": "application/json"},
json={"actor": "unlocker.webunlocker", "input": {"url": url, "js_render": js_render}},
timeout=90,
)
response.raise_for_status()
body = response.json()
# Bright Data with format:"raw" would have given you this directly as response.text
return body["data"]
html = fetch("https://example.com")
print(f"chars={len(html)} starts_with_doctype={html.lstrip().lower().startswith('<!doctype')}")
Giữ việc loại bỏ trong một trợ giúp. Rải response.json()["data"] trên các điểm gọi là cách mà một nửa của mã được chuyển đổi và nửa kia lặng lẽ trả về JSON.
Lỗi 3: Hai bề mặt ngồi trên các phiên bản API khác nhau
Điều này bắt gặp những người giả định rằng một nhà cung cấp có một API. Bề mặt mở khóa nằm trên /api/v2/; diễn viên tìm kiếm Google nằm trên /api/v1/. Đăng diễn viên tìm kiếm vào đường dẫn v2 trả về HTTP 400 {"message":"unknown task type"} — một thông điệp đọc như một thân hình sai hình và khiến bạn đi kiểm tra các trường input của bạn, khi phần phiên bản thực sự là vấn đề.
Cuộc gọi tìm kiếm tự nó là đồng bộ. Nó trả lời trong một lần quay vòng với các kết quả đã được phân tích, vì vậy không có định danh tác vụ và không có vòng lặp kiểm tra.
python
import os
import requests
KEY = os.environ["SCRAPELESS_API_KEY"]
def search(query: str, gl: str = "us", hl: str = "en") -> dict:
"""Google SERP as structured JSON. Note the v1 path — the unlocker is v2."""
response = requests.post(
"https://api.scrapeless.com/api/v1/scraper/request",
headers={"x-api-token": KEY, "Content-Type": "application/json"},
json={"actor": "scraper.google.search", "input": {"q": query, "gl": gl, "hl": hl}},
timeout=120,
)
response.raise_for_status()
return response.json()
data = search("web scraping api")
print("sections:", sorted(data))
for row in data.get("organic_results", [])[:3]:
print(f" {row['position']}. {row['title'][:60]}")
print(f" {row['link']}")
Sự thay đổi lớn hơn ở đây là những gì trở lại. API SERP của Bright Data với format: "raw" trao cho bạn HTML của công cụ tìm kiếm và bạn tự phân tích nó. Scrapeless trả về trang đã được phân tích sẵn — một cuộc gọi sống cho web scraping api đã trở lại với organic_results, pagination, related_searches, search_information và metadata, nơi mỗi hàng tự nhiên mang theo position, title, link, snippet, source, favicon, redirect_link và snippet_highlighted_words.
Hai hệ quả cho cổng. Bộ phân tích HTML SERP của bạn trở thành mã chết — xóa nó thay vì chuyển nó. Và bất kỳ lắp ráp chuỗi truy vấn nào bạn sở hữu cũng trở nên chết, vì truy vấn và ngôn ngữ địa phương di chuyển vào input như q, gl và hl thay vì được xây dựng vào một URL.
Lỗi 4: Thông tin xác thực trình duyệt di chuyển vị trí
Cả hai sản phẩm đều phơi bày CDP, vì vậy mã tự động hóa tự nó sẽ được chuyển giao. Những gì thay đổi là nơi thông tin đăng nhập nằm — Bright Data đặt nó trong userinfo của URL, Scrapeless thì trong một tham số truy vấn.
python
import os
from playwright.sync_api import sync_playwright
# Bright Data (illustrative):
# wss://<username>:<password>@brd.superproxy.io:9222
endpoint = f"wss://browser.scrapeless.com/api/v2/browser?token={os.environ['SCRAPELESS_API_KEY']}"
with sync_playwright() as p:
browser = p.chromium.connect_over_cdp(endpoint)
page = browser.new_page()
page.goto("https://quotes.toscrape.com/", wait_until="domcontentloaded")
print("title:", page.title())
print("quotes on page:", len(page.query_selector_all(".quote")))
browser.close()
Sự thay đổi vị trí này có một hậu quả hoạt động đáng để lập kế hoạch. Nhiều thư viện ghi lại và theo dõi tự động loại bỏ userinfo của URL nhưng giữ nguyên chuỗi truy vấn, vì vậy một chuỗi kết nối trước đây bị ẩn mặc định có thể bắt đầu xuất hiện trong các bản ghi. Lọc trên tham số token trước khi bạn xuất bản.
Hai ràng buộc kích thước trước khi bạn bắt đầu: trình duyệt Scraping của Scrapeless chỉ nói về CDP, vì vậy bộ Selenium là một bản viết lại thay vì một điểm lại, và connect_over_cdp gắn với một trình duyệt từ xa thay vì khởi động một cái, vì vậy bất kỳ tham số launch() nào trong mã hiện tại của bạn không có đích đến.
Một Đơn Hàng Di Chuyển Hiệu Quả
- Kiểm kê các khu vực của bạn và gán nhãn cho mỗi khu vực hình dạng unlocker hoặc hình dạng SERP. Đây là bước phân tách và là phần duy nhất thực sự thủ công.
- Chuyển đường dẫn unlocker trước — đây là sự thay đổi tiêu đề cộng với việc mở bao bì, trong một trợ giúp.
- Chuyển đường dẫn SERP thứ hai, chuyển sang đường dẫn v1 và xóa cả bộ URL của bạn và bộ phân tích HTML của bạn.
- Chuyển tự động hóa trình duyệt cuối cùng; đây là sự khác biệt nhỏ nhất.
- Chạy cả hai ngăn xếp chống lại cùng một danh sách URL và so sánh các trường đã trích xuất, không phải là byte thô. Đánh dấu sự khác biệt vô hại giữa các lần lấy; giá trị trích xuất không nên.
Các Trường Hợp Sử Dụng Di Chuyển Sạch
- Giám sát giá cả và danh mục — hình dạng unlocker, một trợ giúp, khối lượng cao nhất và dễ nhất.
- Theo dõi xếp hạng và giám sát SERP — có các trường có cấu trúc, mất bộ URL.
- Pipeline thu hồi tác nhân và RAG — đầu ra SERP đã phân tích đi thẳng vào một bước thu hồi, loại bỏ giai đoạn phân tích thay vì thêm một cái.
Trường hợp không di chuyển sạch là bộ trình duyệt dựa trên Selenium, vì lý do đã đề cập ở trên. Dự kiến ngân sách riêng cho nó thay vì gộp vào cùng một sprint.
So Sánh Giá Cả
So sánh trung thực mang tính cấu trúc hơn là số liệu. Bright Data gán chi phí cho một khu vực, vì vậy chi tiêu được nhóm theo đối tượng cấu hình và một công việc trải qua hai khu vực xuất hiện ở hai nơi. Scrapeless gán chi phí cho các yêu cầu chống lại một khóa, vì vậy việc gán theo con đường mã đã thực hiện cuộc gọi.
Nếu bạn đang di chuyển một phần vì tính minh bạch về chi phí, sự khác biệt đó quan trọng hơn tỷ lệ tiêu đề. Kiểm tra các số liệu hiện tại trên trang giá của Scrapeless và trên trang giá của riêng Bright Data trước khi mô phỏng bất kỳ điều gì.
Tài Nguyên Liên Quan
- Vẫn đang lựa chọn thay vì chuyển nhượng? So sánh các lựa chọn thay thế Bright Data cho proxy xếp hạng lĩnh vực theo bề mặt.
- Trang sản phẩm Universal Scraping API tài liệu bề mặt unlocker đầy đủ.
- Tham chiếu Giao thức DevTools Chrome đề cập đến định dạng dây mà cả hai sản phẩm trình duyệt nói.
Kết Luận
Một đợt di chuyển Bright Data có kích thước khác biệt nhỏ và dễ dàng bị sai sót một cách tinh vi. Điểm cuối và chìa khóa là nửa có thể nhìn thấy; nửa tốn một chu kỳ gỡ lỗi là một điểm cuối Bright Data ánh xạ tới hai bề mặt Scrapeless, rằng phần thân đến được đóng gói, và rằng hai bề mặt đó nằm trên các phiên bản API khác nhau. Chuyển đường dẫn unlocker trước, giữ việc mở bao bì trong một trợ giúp duy nhất và so sánh các trường đã trích xuất hơn là HTML thô khi bạn cắt qua.
Nếu tích hợp của bạn vẫn đang trên các cổng 22225 hoặc 33335, bạn có một thời hạn trên lịch bất kể nhà cung cấp nào bạn kết thúc. Đó là một thời điểm hợp lý để quyết định một cách có chủ ý thay vì dưới áp lực thời gian vào cuối tháng Chín.
Sẵn Sàng Di Chuyển Các Trình Thu Thập Dữ Liệu Của Bạn?
Tạo một chìa khóa trên bảng điều khiển Scrapeless và chạy đoạn mã unlocker ở trên chống lại một URL bạn đã thu thập. So sánh các trường đã trích xuất chống lại đầu ra hiện tại của bạn là một bài kiểm tra mười lăm phút trả lời hầu hết các câu hỏi di chuyển.
Câu Hỏi Thường Gặp
H: Một cuộc di chuyển Bright Data thực sự mất bao lâu?
Đối với một tích hợp chỉ unlocker, vài giờ: một thay đổi tiêu đề, một mở bao bì trong một trợ giúp, và chạy khác biệt. Đường dẫn SERP thường nhanh hơn mong đợi, vì bạn xóa nhiều mã hơn là bạn viết — cả bộ phân tích HTML và bộ URL đều biến mất. Một bộ trình duyệt Selenium là trường hợp ngoại lệ và nên được phạm vi riêng của nó.
H: Tôi có cần tạo lại các khu vực của mình không?
Không — không có đối tượng zone nào để tái tạo. Một khóa bao phủ mọi bề mặt. Công việc chuyển vào mã của bạn thay vào đó: mỗi zone phải được phân loại là hình dạng mở khóa hoặc hình dạng SERP để địa điểm gọi biết điểm truy cập nào để gọi.
H: Mã Playwright hoặc Puppeteer của tôi có còn hoạt động không?
Có. Cả hai nhà cung cấp đều cung cấp một CDP WebSocket, vì vậy cơ thể tự động hóa được giữ nguyên và chỉ có chuỗi kết nối là khác nhau. Selenium là ngoại lệ: Trình duyệt Scraping Scrapeless chỉ có CDP.
H: Tại sao mã đã chuyển của tôi trả về kết quả trống mà không phát sinh lỗi?
Gần như luôn luôn là bao bì phản hồi. Bright Data với format: "raw" trả về nội dung trang, trong khi Scrapeless trả về JSON với markup bên trong data. Phân tích bao bì dưới dạng HTML không mang lại kết quả và không có ngoại lệ. Thay response.text thành response.json()["data"].
H: Điều gì xảy ra vào ngày 25 tháng 9 năm 2026?
Câu hỏi thường gặp của Bright Data cho biết các chứng chỉ trên các cổng 22225 và 33335 sẽ hết hạn vào lúc 00:00 UTC ngày hôm đó, và lưu lượng truy cập phải chuyển sang cổng 44445. Điều này áp dụng cho việc ở lại Bright Data cũng như việc rời đi, vì vậy hãy coi đó như một ràng buộc lịch trình hơn là một lập luận theo bất kỳ cách nào.
H: Tôi có thể chạy cả hai nhà cung cấp cùng một lúc trong thời gian chuyển đổi không?
Có, và đây là phương pháp được khuyến nghị. Giữ cả hai đường dẫn phía sau một giao diện, gửi một mẫu lưu lượng truy cập đến mỗi cái, và so sánh các trường đã trích xuất. Chuyển giao theo từng công việc thay vì tất cả cùng một lúc, bắt đầu với khối lượng công việc mở khóa lớn nhất.
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.



