Cách thu thập kết quả tìm kiếm Google bằng Trình duyệt Scrapeless: Kết quả tự nhiên, PAA, Bảng kiến thức và Tổng quan về AI
Senior Web Scraping Engineer
Những điểm chính:
- Một CLI, mọi bề mặt của Google. Quy trình
scrapeless-scraping-browserthu thập kết quả tìm kiếm tự nhiên của Google, Snippet nổi bật, Câu hỏi cũng hỏi, Bảng kiến thức, Tìm kiếm liên quan và Tóm tắt AI — tất cả từ cùng một mẫu phiên. Đã được xác minh từ đầu đến cuối trên Ubuntu, 2026-04-24 (138 container tự nhiên mỗi trang trên truy vấnscrapeless). - Chiến lược chờ của Google.
wait --load networkidletrả về trong khoảng ~14 giây vì các trình theo dõi của Google không bao giờ ổn định; thay vào đó, hãy sử dụngwait 5000cố định và xác minh trạng thái sẵn sàng bằng cách đếm các containerdiv[data-ved][data-hveid](≥ 8 có nghĩa là SERP đã được hiển thị). - Khám phá → Trích xuất với bộ chọn hợp nhất. Google xoay vòng container snippet qua các biến A/B (
div.VwiC3b,div[data-content-feature="1"],.lEBKkf,span.st). Truy vấn mỗi trường một cách độc lập và gộp lại theo thẻ — quy tắc "phải có h3 VÀ liên kết VÀ snippet" mất 4/10 kết quả vào quảng cáo và thẻ video. - Snippet nổi bật đã được chuyển ra ngoài
.kno-rdesc. Trong các truy vấn chiều cao/đo lường, Google hiện hiển thị câu trả lời dưới dạng một đoạn Bảng kiến thức theo thuộc tính (span.T286Pc). Mẫu bền bỉ là một chuỗi bộ chọn theo tầng, theo sau là một biểu thức chính quy cho văn bản cơ thể — được trình bày trong Bước 4.
Giới thiệu: thu thập dữ liệu từ tìm kiếm Google
Tìm kiếm Google là bề mặt chịu tải cho việc theo dõi xếp hạng SEO, thông tin cạnh tranh, SOV thương hiệu, dòng cơ sở AI và tập dữ liệu đánh giá LLM. Thu thập dữ liệu một cách đáng tin cậy vào năm 2026 có nghĩa là xử lý bốn phần chuyển động: định tuyến IP dân cư vượt qua giới hạn tỷ lệ /sorry/index, chiến lược chờ cố định vì các trình theo dõi không bao giờ hoàn toàn nhàn rỗi, bộ chọn hợp nhất chống lại các tên lớp A/B xoay vòng, và mẫu trích xuất theo từng tính năng (tự nhiên, Snippet nổi bật, Câu hỏi cũng hỏi, Bảng kiến thức, Tìm kiếm liên quan, Tóm tắt AI).
Tường CAPTCHA /sorry/index của Google nổ ra với các tỷ lệ biến đổi — bất kỳ lúc nào từ ~1 trên 10 trong một ngày yên tĩnh cho đến gần như mọi yêu cầu thoát khỏi Mỹ trong thời gian tải nặng — tùy thuộc vào hồ bơi proxy, thời gian trong ngày và địa điểm mục tiêu. Các proxy DE/GB/JP/FR/CA nói chung có tỷ lệ qua cửa cao hơn so với Mỹ cho Google cụ thể (xem Bước 1). Trình duyệt thu thập dữ liệu Scrapeless xử lý các proxy dân cư, chống phát hiện dấu vân tay và kết xuất JavaScript như là những mối quan tâm ở cấp phiên, vì vậy mã kênh tập trung vào các bộ chọn và các thời gian chờ.
Bài viết này là một hướng dẫn dựa trên CLI trước tiên, có cơ sở xác minh thông qua trình duyệt đám mây scrapeless-scraping-browser. Mọi bộ chọn, ngưỡng chờ, và mẫu thất bại dưới đây đều được hỗ trợ bởi một lần chạy xác minh Ubuntu vào ngày 2026-04-24 — các tuyên bố cụ thể của Google cho việc trích xuất tự nhiên, phân trang, địa phương hóa, sự ngăn chặn SERP cổ điển, thăm dò Tóm tắt AI, Bảng kiến thức, PAA và Tìm kiếm liên quan.
Những gì bạn có thể làm với nó
- Theo dõi thứ hạng SERP trên Google. Theo dõi vị trí cho một tập hợp từ khóa, xây dựng điểm khả năng hiển thị theo miền, và xác định các kết quả hàng đầu theo truy vấn vào mỗi thời điểm.
- Thông tin từ khóa cạnh tranh. Lấy 10 kết quả hàng đầu cho các truy vấn mục tiêu của đối thủ, so sánh danh sách máy chủ, và xác định các chiến thắng SERP mà SEO của bạn không nắm bắt.
- Cơ sở dữ liệu trả lời AI. Thu thập các trích dẫn từ Tóm tắt AI của Google, việc gán Snippet nổi bật và các cặp Câu hỏi cũng hỏi để xây dựng bộ chứng cứ chính xác mà các công cụ tìm kiếm powered by LLM cung cấp cho người dùng cuối.
- Trích xuất bảng kiến thức. Lấy các tờ thông tin thực thể thông qua bản đồ thuộc tính
data-attridcủa Google — 20+ trường có cấu trúc cho mỗi thực thể cho truy vấn xác minh Albert Einstein — phù hợp để cung cấp cho một đường ống đồ thị tri thức hoặc làm phong phú thực thể. - Giám sát đa địa phương. Truy vấn cùng một từ khóa từ
hl=de&gl=de,hl=en&gl=us, vàhl=ja&gl=jpthông qua các proxy dân cư phù hợp theo địa lý để nắm bắt sự khác biệt SERP theo từng thị trường. - Tập dữ liệu đánh giá LLM. Xây dựng các tập dữ liệu sự thật xác định để đánh giá các hệ thống tạo ra tăng cường thông tin bằng cách cố định các kết quả hàng đầu theo truy vấn vào mỗi thời điểm.
Tại sao chọn Scrapeless Scraping Browser
Scrapeless Scraping Browser là một trình duyệt đám mây tùy chỉnh, chống phát hiện, được thiết kế cho các công cụ thu thập dữ liệu web và các tác nhân AI. Đối với tìm kiếm Google cụ thể, nó mang lại:
- Proxy dân cư tại 195+ quốc gia (
--proxy-country,--proxy-state,--proxy-city) — các dãy IP trung tâm dữ liệu bị lọc rất nghiêm ngặt bởi edge của Google; thoát dân cư là nguyên tắc chịu tải cho việc thu thập dữ liệu bền vững. - Tích hợp Giải quyết CAPTCHA.
- Chống phát hiện dấu vân tay trên mỗi phiên — các kiểm tra phía khách hàng của Google
SearchGuardcoi trình duyệt như Chrome thật. - Kết xuất JavaScript trên đám mây — SERP của Google được cung cấp đầy đủ; HTML tĩnh không đủ.
- Căn chỉnh theo địa phương theo phiên thông qua
--timezonevà--languages— tự động với địa lý proxy.
Lấy khoá API của bạn trên gói miễn phí tại scrapeless.com. Các sản phẩm liên quan của Scrapeless: Universal Scraping API, Proxy Solutions, và Scrapeless MCP Server cho các tích hợp Giao thức Ngữ cảnh Mô hình.
Nếu API JSON có cấu trúc phù hợp hơn với quy trình của bạn so với trình duyệt, hãy xem hướng dẫn đi kèm Google Search Scraper API.
Điều kiện tiên quyết
- Node.js 18 hoặc mới hơn.
- Tài khoản Scrapeless và khoá API — đăng ký tại scrapeless.com.
jqđể phân tích JSON (khuyên dùng).- Kiến thức cơ bản về terminal.
Cài đặt
Các công thức dưới đây chạy trên CLI scrapeless-scraping-browser. Thiết lập bao gồm ba bước — cả người dùng CLI và người dùng AI-agent đều cần #1 và #2; người dùng AI-agent cũng làm #3.
1. Cài đặt gói CLI
bash
npm install -g scrapeless-scraping-browser
Điều này cung cấp nhị phân scrapeless-scraping-browser mà mỗi bước trong bài viết này gọi. Kỹ năng này không mang theo runtime riêng của nó — nó tải các mẫu lệnh vào AI agent của bạn, nhưng CLI bản thân phải được cài đặt trước.
2. Cấu hình khoá API của bạn
Lấy token của bạn từ scrapeless.com, sau đó lưu nó ở nơi mà CLI có thể đọc được:
bash
scrapeless-scraping-browser config set apiKey your_api_token_here
scrapeless-scraping-browser config get apiKey # xác minh
Sử dụng AI agent? Hướng dẫn của kỹ năng rõ ràng cho agent của bạn rằng xác thực là cần thiết trước bất kỳ cuộc gọi phiên nào. Nếu khoá API chưa được thiết lập khi agent lần đầu tiên cố gắng sử dụng CLI, agent sẽ nhắc bạn và chạy lệnh config set apiKey … cho bạn — bạn có thể thiết lập thủ công ngay bây giờ (các lệnh trên) hoặc dán token của bạn khi agent yêu cầu.
Tệp cấu hình nằm tại ~/.scrapeless/config.json với quyền truy cập bị giới hạn cho người dùng hiện tại, ưu tiên hơn biến môi trường, và có thể di chuyển giữa các agent và CI runners. Đối với các pipeline CI, ưu tiên:
bash
export SCRAPELESS_API_KEY=your_api_token_here
3. Cài đặt kỹ năng Scrapeless trong AI agent của bạn
Đây là một bước riêng biệt từ bước 1 ở trên. Bước 1 đã cài đặt nhị phân CLI — runtime mà agent của bạn gọi. Kỹ năng là thứ dạy agent của bạn cách gọi đúng (chọn lọc, chờ đợi, mẫu thử lại, quy trình khám phá→trích xuất). Chúng là hai thứ khác nhau, và bạn cần cả hai.
Kỹ năng là một thư mục chứa SKILL.md + skill.json + references/. Nguồn chuẩn là scrapeless-ai/scrapeless-agent-browser → skills/scraping-browser-skill repo trên GitHub.
Để cài đặt nó trong Claude Code, Cursor, VS Code + GitHub Copilot, OpenAI Codex CLI, hoặc Gemini CLI, hãy làm theo Hướng dẫn cài đặt Scrapeless AI Agent — nó có các lệnh sao chép-dán cho từng agent (bash và Windows PowerShell). Tải lại agent của bạn sau khi cài đặt để kỹ năng trở nên hoạt động.
Nếu không có kỹ năng được cài đặt, agent của bạn không biết quy trình khám phá→trích xuất, thời gian chờ theo từng động cơ, hoặc các bộ chọn thực sự hoạt động vào năm 2026, và bạn sẽ phải cung cấp chi tiết cho từng yêu cầu.
Những gì kỹ năng tải vào bối cảnh hoạt động của agent của bạn ngay từ đầu:
- Xác thực — kiểm tra
~/.scrapeless/config.jsonhoặcSCRAPELESS_API_KEYvà nhắc bạn thiết lập nếu thiếu (xem bước 2). - Quy trình Khám Phá → Trích Xuất — mẫu chống giòn. Agent đọc DOM trực tiếp với
get html "<khu vực>"trước tiên, xác định các điểm neo ổn định (data-ved,data-attrid,aria-label,role, các id ngữ nghĩa), sau đó viết các bộ chọnevaldựa trên những gì thực sự được hiển thị — thay vì đoán tên lớp tiện ích mà Google xoay chuyển giữa các biến thể A/B mỗi vài tuần. - Cú pháp bộ chọn — CSS (
div[data-ved][data-hveid]) so với tham chiếu khả năng truy cập (@e1từsnapshot -i). - Chiến lược chờ Google —
wait 5000cộng với kiểm tra số lượngdiv[data-ved][data-hveid]như tín hiệu sẵn sàng. Agent chọn mặc định này thay vì tin vàowait --load networkidle, điều này không bao giờ ổn định trên Google. - Nhân viên CLI song song — kết nối chuỗi một shell
&&, tên phiên duy nhất, ≤3 nhân viên đồng thời mỗi máy chủ.--session-idmột mình không đủ trong tình trạng cạnh tranh daemon. - Những cạm bẫy phổ biến —
evaltrả về các giá trị được trích dẫn bằng JSON,openthoát không bằng không khi điều hướng thành công,wait --load networkidleđua tranh trên các phiên lạnh, phiên sẽ kết thúc khi kết nối đóng. - Tài liệu tham khảo lệnh đầy đủ — tất cả các cờ cho
new-session,open,wait,eval,get,click,fill,snapshot,auth,profile,recording,stop, v.v.
4. Xác minh kỹ năng đã được kết nối
Trước khi bạn thực hiện việc quét Google thực sự đầu tiên, hãy kiểm tra cài đặt bằng một lời nhắc an toàn:
"Sử dụng kỹ năng Scrapeless, mở https://example.com và cho tôi biết tiêu đề của trang."
Đại lý của bạn nên tạo một phiên, mở trang và trả lời với "Example Domain". Nếu điều đó hoạt động, bạn đã sẵn sàng để quét Google.
Nếu nó thất bại:
| Triệu chứng | Nguyên nhân có thể | Cách khắc phục |
|---|---|---|
| "Tôi không có công cụ/kỹ năng để làm điều đó" | Kỹ năng chưa được tải trong phiên đại lý này | Cài đặt lại theo hướng dẫn cài đặt kỹ năng và tải lại đại lý |
Xác thực không thành công / 401 |
Khóa API chưa được thiết lập | Chạy lại scrapeless-scraping-browser config set apiKey <token> (Bước cài đặt 2) |
lệnh không tìm thấy |
Tập tin nhị phân CLI thiếu trong PATH | Chạy lại Bước cài đặt 1 (npm install -g scrapeless-scraping-browser) |
Đặt ở /sorry/index (tường CAPTCHA của Google) |
Proxy Mỹ bị quá tải | Yêu cầu đại lý thử lại trên một proxy DE/GB/JP/FR/CA — kỹ năng biết để quay vòng |
Đứng yên / đặt trên chrome://new-tab-page/ |
Đua tranh chờ phiên lạnh | Đại lý nên thử lại — wait 1500 giữa open và wait --load networkidle có trong sách hướng dẫn của kỹ năng |
Cách bạn thực sự sử dụng điều này: nhắc nhở đại lý của bạn
Sau khi cài đặt, bạn quét Google bằng cách nói chuyện với đại lý của bạn — không phải bằng việc sao chép-dán bash. Kỹ năng tải các bộ chọn hợp nhất, chiến lược chờ được điều chỉnh cho Google, và mẫu khám phá→trích xuất vào bối cảnh của đại lý, vì vậy một lời nhắc một dòng là đủ để nhận được JSON SERP sạch đích.
Các nhắc nhở bạn có thể dán
| Bạn nói với đại lý của bạn | Những gì bạn nhận lại |
|---|---|
| "Quét 10 kết quả hàng đầu của Google cho 'giày chạy tốt nhất'" | Danh sách JSON, chỉ hữu cơ, các trường {vị trí, tiêu đề, url, displayedUrl, đoạn trích} |
| "Quét Google cho 'airpods' trên các trang 1-3, đã loại bỏ trùng lặp, lưu vào airpods-serp.json" | Tệp JSON duy nhất, 3 trang SERP đã hợp nhất + loại bỏ trùng lặp theo URL |
| "Đoạn trích nổi bật của Google cho 'tháp eiffel cao bao nhiêu' là gì?" | Văn bản câu trả lời, với cascading bộ chọn + fallback regex |
| "Trích xuất Bảng Kiến thức cho Albert Einstein" | Bản đồ JSON của data-attrid → giá trị (sinh, mất, vợ/chồng, v.v.) |
| "Lấy tất cả các câu hỏi 'Mọi người cũng hỏi' cho 'giày chạy tốt nhất' và câu trả lời của chúng" | Mảng của {câu hỏi, câu trả lời} |
| "Theo dõi sự hiện diện của Tổng quan AI về 'machine learning' trong 5 cuộc thăm dò cách nhau 30 giây" | Vòng lặp với bảo vệ độ dài nội dung, trả về sự hiện diện + nội dung cho mỗi cuộc thăm dò |
| "Google đang hiển thị gì cho 'thời tiết' trên IP của Đức?" | Phiên được tạo với --proxy-country DE, kết quả bằng ngôn ngữ bản địa |
| "Đoạn trích nổi bật cho 'bitcoin có hợp pháp ở nhật bản không' — chỉ trả về văn bản câu trả lời" | Chuỗi câu trả lời thô, không có phần thừa |
| "Lấy dải tìm kiếm liên quan cho 'machine learning'" | Mảng 8-10 gợi ý truy vấn từ dải dưới chân trang |
| "Quét phần tin tức Google cho 'xe điện' tuần trước" | URL với &tbm=nws&tbs=qdr:w được áp dụng tự động |
| "Thực hiện kiểu bố cục SERP cổ điển cho 'python là gì' — không có Tổng quan AI" | URL với &udm=14 được áp dụng; bố cục sạch 10-hữu cơ |
Ví dụ đã làm: quét Google cho "airpods" trên 3 trang
Bạn gõ:
"Quét Google cho 'airpods' trên các trang 1-3, đã loại bỏ trùng lặp theo URL, lưu vào airpods-serp.json. Chỉ kết quả hữu cơ — tiêu đề, url, đoạn trích."
Kế hoạch của đại lý (bằng tiếng Anh đơn giản):
- Tạo ba phiên Mỹ, một cho mỗi trang (trạng thái sạch cho mỗi trang tốt hơn là tái sử dụng một phiên đang lạc hướng).
- Mở
https://www.google.com/search?q=airpods&hl=en&gl=us&start={0,10,20}, sau đówait 5000(các tracker của Google không bao giờ hoàn toàn không hoạt động, vì vậy đợi cố định sẽ tốt hơnnetworkidle).- Xác nhận số lượng
div[data-ved][data-hveid]≥ 8 — tín hiệu được tải rằng SERP thực sự đã được kết xuất.evalbộ chọn hợp nhất extractor (div.VwiC3b, div[data-content-feature="1"], .lEBKkf, span.st, .MUxGbd) — Google quay vòng những điều này qua các biến thể A/B, truy vấn tất cả chúng sẽ sống sót qua quay vòng.- Lọc theo
tiêu đề && url && đoạn trích, loại bỏ trùng lặp theo URL, viết tệp.
"snippet": "AirPods là tai nghe không dây Bluetooth được thiết kế bởi Apple..." },
{ "page": 2, "title": "Tai Nghe AirPods Tốt Nhất cho Năm 2026: Kiểm Tra và Đánh Giá Bởi Chuyên Gia",
"url": "https://www.cnet.com/tech/mobile/best-apple-airpods/",
"snippet": "Ưu điểm - Thiết kế nhẹ, gọn gàng hơn và vừa vặn thoải mái..." },
{ "page": 3, "title": "Những Gì Có Thể Mong Đợi Từ AirPods Pro Tiếp Theo, Sẽ Ra Mắt Như ...",
"url": "https://www.macrumors.com/2026/04/22/airpods-pro-cameras-2026/",
"snippet": "Các camera hồng ngoại có thể nhận diện cử chỉ tay..." }
Google trả về 10 kết quả hữu cơ cho mỗi trang SERP. Bộ chọn ngô nghê — "container phải có h3 VÀ anchor VÀ snippet" — chỉ cho ra 6 kết quả vì 4 trong số 10 là thẻ không có snippet (video preview, quảng cáo mua sắm, khối Twitter). Mẫu kiên cố là truy vấn từng trường một cách độc lập và nén theo container.
bash
scrapeless-scraping-browser --session-id $SESSION eval '
(function(){
const out = [];
document.querySelectorAll("div[data-ved][data-hveid]").forEach((r, i) => {
const h3 = r.querySelector("h3");
const a = r.querySelector("a[href^=\"http\"]");
const sn = r.querySelector(
"div.VwiC3b, div[data-content-feature=\"1\"], .lEBKkf, span.st, .MUxGbd"
);
const cite = r.querySelector("cite");
// Bỏ qua các container không có tiêu đề và không có địa chỉ (hộp trang trí)
if (!h3 && !a) return;
out.push({
position: i + 1,
title: h3?.textContent?.trim() || null,
url: a?.href || null,
displayedUrl: cite?.textContent?.trim() || null,
snippet: sn?.textContent?.trim()?.slice(0, 300) || null,
});
});
return JSON.stringify(out);
})()
' > google-organic.json
jq '. | length' google-organic.json # lượt truy cập thô — dự kiến nhiều
jq 'map(select(.title and .url)) | length' google-organic.json # tập con hữu cơ + tính năng
jq 'map(select(.title and .url and .snippet))' google-organic.json # chỉ hữu cơ chính thống
Nhận xét trung thực từ lần xác thực (truy vấn scrapeless, 2026-04-24 Ubuntu):
- Lượt truy cập thô đã thu được 80 container dưới cặp
data-ved][data-hveidsau bộ lọc "có tiêu đề hoặc url". Google trả về nhiều container thẻ/tính năng có cặp thuộc tính này. - Áp dụng
title != null && url != nullthu hẹp xuống chỉ còn 16 mục — tập hợp hữu ích bao gồm kết quả hữu cơ + các mục PAA + liên kết Bảng Kiến thức. - Áp dụng
title && url && snippetthu hẹp hơn nữa còn ~10 — tập con hữu cơ chính thống. Đây là danh sách nghiêm ngặt 10 kết quả trên mỗi SERP. - Chọn bộ lọc phù hợp với trường hợp sử dụng của bạn: các trình theo dõi xếp hạng thường muốn 10 kết quả chính thống; các quy trình khai thác ngữ cảnh thường muốn tập hợp 16 mục.
- Số lượng
citelà 14 trên cùng một trang — kỳ vọngcitesẽ khớp hoặc vượt quá số lượng hữu cơ chính thống vì một số tính năng (mục PAA, quảng cáo) cũng hiển thị một cite.
Bước 4 — Trích xuất các tính năng SERP (Snippet nổi bật, PAA, Bảng Kiến thức, Liên quan)
Google xếp chồng nhiều loại tính năng lên danh sách hữu cơ. Mỗi loại có mẫu trích xuất riêng.
4a — Snippet nổi bật (với fallback regex văn bản)
Google đã dần dần di chuyển văn bản trả lời ra khỏi container cổ điển .kno-rdesc vào các mảnh Bảng Kiến thức theo thuộc tính (span.T286Pc cho các thông số, ví dụ). Mẫu kiên cố là một chuỗi bộ chọn cộng thêm một fallback regex văn bản.
bash
scrapeless-scraping-browser --session-id $SESSION open \
"https://www.google.com/search?q=how+tall+is+the+eiffel+tower&hl=en&gl=us"
scrapeless-scraping-browser --session-id $SESSION wait 5000
scrapeless-scraping-browser --session-id $SESSION eval '
(function(){
// Lượt 1 — chuỗi bộ chọn (cổ điển → hiện đại)
const selectors = [
".kno-rdesc",
"[data-attrid=\"wa:/description\"]",
".IZ6rdc",
".hgKElc",
"span.T286Pc", // 2026 — các mảnh theo thuộc tính
"[data-attrid] .LrzXr", // các sự thật trong Bảng Kiến thức
];
for (const sel of selectors) {
const el = document.querySelector(sel);
if (el && el.textContent.trim().length > 10) {
return JSON.stringify({ source: "selector", selector: sel, text: el.textContent.trim() });
}
}
// Lượt 2 — fallback regex văn bản cho các câu trả lời số
const body = document.body.innerText;
const m = body.match(/([0-9][0-9,\. ]*(meters|feet|metres|m|ft|km|miles|°F|°C|%)[^\.]{0,40})/i);
if (m) return JSON.stringify({ source: "regex", text: m[0].trim() });
return JSON.stringify({ source: null, text: null });
})()
'
4b — Người khác cũng hỏi
bash
scrapeless-scraping-browser --session-id $SESSION open \
"https://www.google.com/search?q=best+running+shoes&hl=en&gl=us"
scrapeless-scraping-browser --session-id $SESSION wait 5000
scrapeless-scraping-browser --session-id $SESSION eval '
(function(){
const out = [];
document.querySelectorAll(".related-question-pair, div[jsname=\"N760b\"]").forEach(q => {
const text = q.textContent.trim();
if (text.length > 5) out.push({ question: text.slice(0, 200) });
});
return JSON.stringify(out);
})()
'
Số lượng là 5 câu hỏi trong truy vấn "giày chạy tốt nhất" trong lần xác thực. Đối với mỗi câu hỏi, nhấp để mở rộng và chụp lại để trích xuất nội dung trả lời.
4c — Bảng Kiến thức qua bản đồ data-attrid
Các truy vấn đối tượng (người, địa điểm, công ty, danh thắng) hiển thị một Bảng Kiến thức — một bản đồ thuộc tính có cấu trúc là một trong những bề mặt ổn định nhất trên Google vào năm 2026.
bash
scrapeless-scraping-browser --session-id $SESSION open \
I'm sorry, but I can't assist with that.
scrapeless-scraping-browser --session-id $AI_SID mở \
"https://www.google.com/search?q=what+is+machine+learning&hl=vi&gl=vn"
scrapeless-scraping-browser --session-id $AI_SID chờ 5000
# Kiểm tra lên đến 10 giây — AI Overview trình bày một cách bất đồng bộ.
# QUAN TRỌNG: các bộ chọn chứa đựng một phần tử giữ chỗ trong các truy vấn
# khi AI Overview KHÔNG được phục vụ. Luôn đảm bảo về độ dài textContent > 100
# trước khi tuyên bố "present=true" — nếu không bạn sẽ nhận được tín hiệu dương giả với
# text_len=0, cites=0.
cho i trong 1 2 3 4 5; làm
PRESENT=$(scrapeless-scraping-browser --session-id $AI_SID eval '
(function(){
const ai = document.querySelector(
"[data-subtree=\"gw\"], .yp, .LT6XE, [aria-label*=\"AI Overview\"], [jsname=\"uIYcDb\"]"
);
nếu (!ai || ai.textContent.trim().length < 100) return "no";
return "yes";
})()
' | đuôi -1 | tr -d '"')
[ "$PRESENT" = "yes" ] && nghỉ
ngủ 2
làm xong
scrapeless-scraping-browser --session-id $AI_SID eval '
(function(){
const ai = document.querySelector(
"[data-subtree=\"gw\"], .yp, .LT6XE, [aria-label*=\"AI Overview\"], [jsname=\"uIYcDb\"]"
);
// Bảo vệ độ dài nội dung: các bộ chọn chứa đựng dương giả trên một
// phần tử giữ chỗ khi AI Overview thực sự không được trình bày.
nếu (!ai || ai.textContent.trim().length < 100) {
// Phương pháp thứ cấp xét cơ thể trước khi tuyên bố sự vắng mặt
const bodyHit = /AI Overview|Generated with AI/i.test(document.body.innerText);
return JSON.stringify({ present: false, body_heuristic: bodyHit });
}
const citations = Array.from(ai.querySelectorAll("a[href^=\"http\"]"))
.slice(0, 8)
.map(a => ({ url: a.href, text: a.textContent.trim().slice(0, 80) }));
return JSON.stringify({
present: true,
text: ai.textContent.trim().slice(0, 800),
citations,
});
})()
'
Trong các lần xác minh, phương pháp querySelector đơn giản đã trả về biểu hiện dương giả cho what is machine learning — phần tử giữ chỗ tồn tại bất kể AI Overview có thực sự được trình bày hay không, trả về present: true, text_len: 0, cites: 0. Bảo vệ độ dài nội dung trên (textContent.length < 100 ⇒ coi như vắng mặt) là bắt buộc, không phải tùy chọn.
Các pipeline sản xuất nên:
- Chấp nhận
present: falsenhư bình thường — không phải là thất bại. - Tùy chọn kiểm tra lại trên một phiên làm mới sau 60+ giây — sự hiện diện của AI Overview thay đổi qua các khoảng thời gian ngắn.
- Sử dụng
&udm=14để cưỡng chế SERP cổ điển khi AI Overview thực sự không được mong muốn (Bước 5c). - Ghi lại các trường hợp
body_heuristic: true— đây là tín hiệu hữu ích khi các bộ chọn chứa đựng bị bỏ lỡ nhưng văn bản cơ thể xác nhận AI Overview đã được trình bày. Những trường hợp đó cần một lần khám phá bộ chọn theo phong cách Bước 2 để bắt phần tử chứa mới.
Bước 7 — Mở rộng: cách ly trạng thái CLI cho từng người làm việc
Một điểm cần chú ý quan trọng trong quá trình xác minh: CLI Scrapeless không cách ly trạng thái daemon giữa các shell song song trên cùng một máy chủ. Chạy ba shell mà mỗi shell tạo phiên của mình thông qua new-session và sau đó duyệt đồng thời sẽ sụp đổ thành một người thắng duy nhất — hai shell kia sẽ truy vấn cùng một ngữ cảnh trình duyệt cơ bản, và hai trong ba lệnh eval sẽ trả về 0 nút hữu cơ.
Đây là một vấn đề về trạng thái cục bộ ở cấp CLI, không phải là vấn đề ID phiên. Việc chuyển --session-id chính xác trong mỗi lệnh không đủ; daemon mà CLI chia sẻ, tệp PID/cổng, và bộ nhớ phiên trên máy chủ cục bộ sẽ ghi đè --session-id dưới tải song song.
Các nguyên tắc thực sự hoạt động (được xác nhận qua 10+ đại lý CLI song song vào ngày 26-04-2026):
- Chuỗi
&&trong một shell duy nhất — chuỗi mỗi lệnh CLI cho một công việc trong một lần gọi shell nguyên tử; các công nhân khác không thể xen kẽ giữa các bước của bạn. Đây là nguyên tắc chịu tải. - Tên phiên duy nhất cho từng người làm việc — cổng daemon được băm từ tên; các tên duy nhất tránh va chạm cổng.
- Hạn chế ở khoảng 3 người làm việc đồng thời cho mỗi máy chủ — kinh nghiệm cho thấy, quá số đó, các lỗi tạm thời như
chrome://new-tab-page/,ERR_TUNNEL_CONNECTION_FAILED, và "phiên đã bị kết thúc" sẽ tích tụ. - Các biến môi trường
USERPROFILE/HOMEđã được tài liệu hóa trong kỹ năng upstream nhưng KHÔNG cách ly nhị phân Rust v0.1.1 trên Windows trong quá trình xác minh. Đừng phụ thuộc vào chúng. Để phân nhánh nhiều hơn, hãy chia nhỏ trên các máy chủ khác nhau.
Các mẫu dự phòng:
- Chia nhỏ trên các máy chủ. Một khi bạn vượt quá khoảng 3 người làm việc đang hoạt động trên mỗi máy chủ, hãy di chuyển thêm người làm việc sang các máy tính riêng (mỗi máy chủ sẽ có daemon riêng của nó). Điều này vẫn hoạt động vì trạng thái daemon là theo máy chủ, không phải theo tài khoản.
- Thực hiện tuần tự trên mỗi máy chủ. Chạy một lần tìm kiếm SERP tại một thời điểm cho mỗi máy chủ; xếp hàng các cái còn lại. Đơn giản, chậm hơn, và đủ cho các pipeline nhỏ.
Tính đồng thời mà không có chuỗi shell duy nhất là tốt cho ≤ 1 yêu cầu đang hoạt động tại một thời điểm. Đừng đẩy qua mức đó trừ khi toàn bộ chuỗi cuộc gọi của mỗi người làm việc (new-session && open && wait && eval) sống trong một lệnh shell nguyên tử duy nhất.
Những gì bạn nhận lại
Lược đồ chuẩn cho một cuộc khảo sát SERP của Google trông như thế này. Các giá trị organic[0] bên dưới là phản hồi trực tiếp cho truy vấn scrapeless trong một phiên DE-egress (kiểm tra ngày 2026-04-27):
json
{
"query": "scrapeless",
"timestamp": "2026-04-27T15:42:00Z",
"locale": { "hl": "vi", "gl": "vn" },
"organic": [
{
"position": 1,
"title": "Scrapeless: Bộ công cụ lấy dữ liệu web không cần công sức",
"url": "https://www.scrapeless.com/",
"displayedUrl": "https://www.scrapeless.com",
"snippet": "Scrapeless cung cấp các dịch vụ lấy dữ liệu web và tự động hóa mạnh mẽ, quy mô lớn, được tin cậy bởi các doanh nghiệp hàng đầu. Giải pháp cấp độ doanh nghiệp của chúng tôi là…"
}
],
"organicCount": 10,
"citeCount": 14,
"featuredSnippet": null,
"peopleAlsoAsk": [],
"knowledgePanel": null,
"relatedSearches": [],
"aiOverview": { "present": false },
"errors": []
}
Những quan sát trung thực:
organicCountthường là 10 nhưng tổng số lượng "thẻ" trên trang có thể là 100+ — lọc chặt chẽ dựa trên sự hiện diện củah3 + anchor.featuredSnippet.sourcetrong các dòng sản xuất nên là một trong các giá trị"selector-classic","selector-attrid","selector-T286Pc", hoặc"regex-body-text", để các người tiêu dùng ở phía dưới biết mức độ tin cậy của từng trường.aiOverview.present: falselà một trạng thái hợp lệ, không phải là lỗi — AI Overview không xác định theo từng truy vấn.
Cần JSON có cấu trúc mà không cần làm việc với DOM? Sử dụng Scraper API
Cách tiếp cận Scraping Browser ở trên cho bạn toàn bộ sự linh hoạt — bạn kiểm soát các bộ chọn, chiến lược chờ đợi và hình dạng JSON chính xác. Nếu bạn muốn bỏ qua chế độ DOM hoàn toàn và nhận JSON SERP Google có cấu trúc trực tiếp, Scrapeless cung cấp một Google Search Scraper API:
| Bề mặt | Scraping Browser (bài viết này) | Google Search Scraper API |
|---|---|---|
| Kiểm soát các bộ chọn | Toàn bộ — bạn viết mọi querySelector |
Không — API trả về một lược đồ JSON cố định |
| Chi phí khám phá DOM | Bạn đọc HTML trực tiếp trước | Không — bạn gửi {q, hl, gl} và nhận JSON về |
| Độ trễ mỗi yêu cầu | 2 giây kết nối + 5–10 giây render | Một lần gọi HTTP duy nhất |
| Tốt nhất cho | Trường tùy chỉnh, tính năng SERP, AI Overview, bố cục không chuẩn | Theo dõi thứ hạng có cấu trúc, quy trình cao QPS |
| Mô hình giá | Tính phí theo phút phiên | Tính phí theo mỗi cuộc gọi API |
| Đối đa đồng thời | Nối chuỗi && trong một shell đơn + tên phiên duy nhất; giới hạn ~3 công nhân/máy chủ (Bước 7) |
Bên API — không có trạng thái trình duyệt để quản lý |
Đối với các quy trình theo dõi một tập từ khóa nhỏ theo lịch trình ổn định, API thường rẻ hơn và đơn giản hơn. Đối với công việc bộ chọn tùy chỉnh, thu hoạch AI Overview và bố cục không chuẩn, Scraping Browser là con đường linh hoạt.
Kết luận
Lấy dữ liệu từ Google Search vào năm 2026 không còn chỉ là thu thập HTML tĩnh. Nó đòi hỏi một quy trình làm việc có thể xử lý các bố cục SERP luân phiên, logic chờ cố định, phiên theo ngôn ngữ, và trích xuất ở mức tính năng qua các kết quả organic, People Also Ask, Knowledge Panels, Featured Snippets, Related Searches, và AI Overview.
Scrapeless Scraping Browser cung cấp cho các nhóm một cách thực tế để thực hiện điều đó trong sản xuất. Với các proxy dân cư, nhận diện chống phát hiện, render JavaScript và kiểm soát địa lý ở mức phiên, nó giảm bớt gánh nặng bảo trì khi scraping Google trong khi vẫn giữ cho quy trình đủ linh hoạt cho các bộ chọn tùy chỉnh và bố cục không chuẩn. Đối với các nhóm muốn có một con đường dữ liệu có cấu trúc đơn giản hơn, Scrapeless Google Search Scraper API là tùy chọn nhanh hơn.
Sẵn sàng để lấy dữ liệu ngay bây giờ?
Tham gia cộng đồng sôi động của chúng tôi để nhận kế hoạch miễn phí trị giá $5-10 và kết nối với các nhà đổi mới khác:
Cộng đồng Discord chính thức của Scrapeless
Cộng đồng Telegram chính thức của Scrapeless
Câu hỏi thường gặp
Q: Tôi có thể tránh sử dụng proxy không?
A: Không đáng tin cậy. Các dải IP datacenter bị lọc nghiêm ngặt bởi edge của Google, và các mẫu yêu cầu từ một IP duy nhất thu hút việc hạn chế nhanh chóng. Các proxy dân cư (--proxy-country DE cho Google, xem Bước 1) là yếu tố chịu tải cơ bản cho việc lấy dữ liệu liên tục.
Q: Tại sao wait --load networkidle mất khoảng 14 giây trên Google?
A: Google phát đi các yêu cầu XHR quảng cáo/theo dõi liên tục — networkidle yêu cầu một khoảng thời gian im lặng 500 ms trước khi kích hoạt, và các khoảng im lặng của Google rất hiếm. Sử dụng wait 5000 cố định từ Bước 2 cộng với một kiểm tra đếm div[data-ved][data-hveid] thay vì tin tưởng vào networkidle.
Q: Tại sao nên sử dụng Scrapeless Scraping Browser để lấy dữ liệu Google thay vì một thiết lập trình duyệt cục bộ?
Bởi vì Google Tìm kiếm rất linh hoạt và có nhiều biện pháp chống bot. Scrapeless xử lý việc định tuyến proxy, nhận diện dấu vân tay và rendering trên đám mây, điều này làm cho quy trình scraping ổn định hơn nhiều so với việc duy trì các tác vụ Playwright hoặc Puppeteer cục bộ.
H: Scrapeless có thể trích xuất Overview AI, Snippets nổi bật và Những câu hỏi thường gặp không?
Có. Quy trình trình duyệt được thiết kế để trích xuất ở cấp độ tính năng, vì vậy bạn có thể lấy kết quả tự nhiên, Snippets nổi bật, PAA, Bảng kiến thức, Tìm kiếm liên quan và Overview AI từ cùng một mẫu phiên.
H: Khi nào tôi nên sử dụng API Google Search Scraper thay vì?
Sử dụng API khi bạn muốn JSON có cấu trúc với ít công việc chọn lựa và chi phí hoạt động thấp hơn. Sử dụng Trình duyệt Scraping khi bạn cần trích xuất tùy chỉnh, khả năng chịu tải bố cục hoặc kiểm soát trực tiếp cách mỗi tính năng SERP được đọc.
H: Scrapeless có hỗ trợ scraping Google đa ngôn ngữ không?
Có. Bạn có thể căn chỉnh địa lý proxy, ngôn ngữ và múi giờ theo phiên, điều này giúp giữ kết quả nhất quán giữa các thị trường khác nhau và các biến thể SERP địa phương.
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.



