我們在上一期指南中介紹的`&start;=`參數基本方法適用於簡單的抓取任務,但在進行大規模抓取或處理現代谷歌搜索的動態內容時,這種方法很快就會失效。
如今的谷歌搜索已不再是一個靜態的 HTML 頁面——它是一個複雜的網絡應用程序,通過 JavaScript 動態加載大部分內容。它採用了先進的基於人工智能的反機器人系統,能夠根據數百種信號(包括瀏覽器指紋、鼠標移動和輸入模式)來檢測甚至是最複雜的爬蟲程序。
在本指南中,我們將向您展示如何構建一個可靠且符合生產級標準的 Google 搜索結果頁面(SERP)抓取工具,該工具能夠處理現代 Google 的動態內容並應對其嚴格的反機器人系統。我們將涵蓋無頭瀏覽器自動化、模擬人類行為的技術、動態內容提取,以及代理在無需驗證碼的情況下擴展操作規模所發揮的關鍵作用。

為什麼 Basic &start;= 爬取在 2026 年會失敗
在現代谷歌上使用這種基於簡單請求的爬取方法存在三個致命缺陷:
1. 不支持 JavaScript:基礎 HTTP 客戶端無法執行 JavaScript,因此無法獲取頁面初始加載後加載的所有動態內容。這包括“人們還問”框、視頻搜索結果、本地搜索結果和 AI 概覽,這些內容目前已佔平均搜索結果頁面(SERP)的 60%。
2. 容易被識別:簡單的 HTTP 客戶端具有獨特的特徵,谷歌可以立即識別出來。即使你輪換用戶代理,在發送幾次請求後仍會被封禁。
3. 結果不一致:谷歌向爬蟲返回的結果與向真實人類用戶返回的結果不同。基礎爬蟲通常獲取到的數據過時或不完整,與實際用戶所見的內容不符。
要克服這些限制,您需要使用無頭瀏覽器——這是一種不帶圖形界面的真實瀏覽器,它能讓您完全自動化地執行與人類用戶完全相同的操作。
現代搜索結果頁面(SERP)抓取的最佳工具:Playwright
目前市面上有多種無頭瀏覽器庫,但就抓取谷歌搜索結果頁面而言,Playwright 無疑是最佳選擇。由微軟開發的 Playwright 比 Selenium 等老牌工具運行更快、更可靠,且具備更強的反檢測能力。
Playwright 允許您:
- 通過單一 API 實現 Chrome、Firefox 和 Safari 的自動化
- 模擬真實的鼠標移動、滾動和打字
- 攔截並修改網絡請求
- 截屏和錄製視頻
- 從異步加載的動態內容中提取數據
完整的生產級刮板實現
以下是一個使用 Playwright 編寫的完整且可用於生產環境的 Google 搜索結果頁面(SERP)抓取工具。該腳本實現了本指南中將要介紹的所有最佳實踐,包括模擬人類行為的延遲、自然滾動以及代理集成。
Python
import random
import time
from playwright.sync_api import sync_playwright
def human_delay(min_ms=600, max_ms=2500):"""Add a random delay to mimic human behavior"""
time.sleep(random.uniform(min_ms / 1000, max_ms / 1000))def human_scroll(page):"""Simulate natural scrolling through the page"""
scroll_height = page.evaluate("document.body.scrollHeight")
current_position = 0while current_position < scroll_height:# Scroll a random distance
scroll_step = random.randint(200, 600)
current_position += scroll_step
# Don't scroll past the end of the pageif current_position > scroll_height:
current_position = scroll_height
page.mouse.wheel(0, scroll_step)
human_delay(200, 700)def extract_organic_results(page):"""Extract all organic results from the page"""
results = []
result_items = page.locator("div#search div.g")for i in range(result_items.count()):
item = result_items.nth(i)# Skip non-organic resultsif item.locator("div[data-ad-render]").count() > 0:continue
title = item.locator("h3").first.inner_text(timeout=2000) if item.locator("h3").first.is_visible() else None
url = item.locator("a").first.get_attribute("href", timeout=2000) if item.locator("a").first.is_visible() else None
description = item.locator("div.VwiC3b").first.inner_text(timeout=2000) if item.locator("div.VwiC3b").first.is_visible() else Noneif title and url:
results.append({"position": len(results) + 1,"title": title,"url": url,"description": description
})return results
def scrape_google_top_100(query, proxy=None):
all_results = []with sync_playwright() as p:# Launch browser with anti-detection flags
browser = p.chromium.launch(
headless=True,
args=["--disable-blink-features=AutomationControlled","--no-sandbox","--disable-dev-shm-usage","--disable-web-security","--allow-running-insecure-content"])# Create a new browser context with proxy if provided
context_args = {"viewport": {"width": 1366, "height": 768},"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36"}if proxy:
context_args["proxy"] = {"server": proxy["server"],"username": proxy["username"],"password": proxy["password"]}
context = browser.new_context(**context_args)
page = context.new_page()# Navigate to Google
page.goto("https://www.google.com", wait_until="domcontentloaded")
human_delay(1500, 3000)# Accept cookies if the prompt appearsif page.locator("button#L2AGLb").is_visible():
page.locator("button#L2AGLb").click()
human_delay(1000, 2000)# Type the search query naturally
search_box = page.locator("textarea[name='q']")
search_box.click()
human_delay(500, 1000)for char in query:
search_box.type(char, delay=random.randint(50, 150))
human_delay(500, 1000)
search_box.press("Enter")
human_delay(2000, 4000)
page_number = 1while len(all_results) < 100:print(f"Scraping page {page_number}")# Scroll naturally through the page to load all content
human_scroll(page)
human_delay(1000, 2000)# Extract results
page_results = extract_organic_results(page)print(f"Found {len(page_results)} results on page {page_number}")for result in page_results:if len(all_results) >= 100:break
result["page"] = page_number
all_results.append(result)# Check if there's a next page
next_button = page.locator("a#pnnext")if not next_button.is_visible() or len(all_results) >= 100:break# Click the next page button naturally
next_button.scroll_into_view_if_needed()
human_delay(1000, 2000)
next_button.click()
page.wait_for_load_state("domcontentloaded")
human_delay(2000, 4000)
page_number += 1
browser.close()return all_results
# Usage with IPFLY proxyif __name__ == "__main__":# Replace with your IPFLY proxy credentials
ipfly_proxy = {"server": "http://gate.ipfly.com:10000","username": "your-ipfly-username","password": "your-ipfly-password"}
results = scrape_google_top_100("best wireless headphones 2026", proxy=ipfly_proxy)print(f"\nSuccessfully scraped {len(results)} results:")for result in results:print(f"{result['position']}. {result['title']} — {result['url']}")
高級擬人化技術
上面的腳本實現了基礎的人性化處理,但為了獲得最高的成功率,你應該添加以下高級技巧:
- 隨機化瀏覽器指紋:為每次會話使用不同的視口尺寸、用戶代理和瀏覽器設置
- 調整會話時長:不要在每個頁面上花費完全相同的時間
- 模擬鼠標移動:在點擊鏈接前,讓鼠標在頁面上隨機移動
- 添加偶爾的錯誤:在輸入搜索查詢時,輸入一個錯誤的字符,然後用退格鍵將其刪除
- 隨機化請求順序:不要總是按1到10的順序抓取頁面
代理在擴展中的關鍵作用
即使採用了最先進的人工智能技術,如果你所有請求都來自同一個 IP 地址,最終仍會被封禁。尤其是在現在,你需要發送多出 10 倍的請求才能收集到相同數量的數據,這種情況更是如此。
若要實現可靠的大規模搜索結果頁面(SERP)抓取,您需要使用具備自動輪換功能的高質量住宅代理。住宅代理使用分配給真實家庭的IP地址,使您的流量與普通人類用戶的流量毫無二致。
IPFLY 的住宅代理網絡專為 Google 搜索結果頁面(SERP)抓取進行了優化。該網絡覆蓋 190 多個國家/地區,擁有超過 1000 萬個 IP 地址,您可以將請求分散到數千個獨立地址上,確保每個 IP 地址每天發送的查詢不超過一兩次。我們的自動輪換功能會在每次請求時切換您的 IP 地址,從而大幅降低驗證碼(CAPTCHA)觸發率,並支持您將抓取操作擴展至每天數百萬次查詢。
為了獲得最高的成功率,我們建議在抓取谷歌數據時使用移動代理。在所有代理類型中,移動IP的封禁率最低,因為谷歌極不願封禁這些IP,以免誤傷真實的移動用戶。
處理動態搜索結果頁面元素
現代搜索結果頁面(SERP)包含的內容遠不止自然搜索結果。要想全面瞭解搜索結果,您還需要提取以下這些動態元素:
- “人們還問”框:其中包含與搜索查詢相關的常見問題
- 視頻搜索結果:出現在搜索結果頁面(SERP)中的 YouTube 及其他視頻內容
- 本地包:針對本地搜索查詢的商家信息
- AI 概覽:谷歌在許多搜索結果頁面頂部顯示的由 AI 生成的答案
- 購物廣告:針對電商搜索的商品列表
Playwright 通過模擬人類用戶會進行的操作(例如點擊展開“人們還問”框),讓提取所有這些元素變得輕而易舉。

在2026年抓取谷歌搜索結果頁面(SERP)所需的方法,比一年前要複雜得多。僅靠簡單的HTTP請求和#=100參數的時代已經一去不復返了。
如今,要成功進行搜索結果頁面(SERP)抓取,必須結合無頭瀏覽器自動化、先進的人工化技術以及高質量的輪換代理。通過實施本指南中概述的方法並使用 IPFLY 的住宅代理,您可以構建一個可靠且可擴展的抓取系統,即使面對谷歌最嚴格的反機器人系統也能從容應對。