网络爬虫 · 1 分钟阅读

在不被封锁的情况下抓取谷歌搜索结果

谷歌对自动搜索请求进行严格的速率限制,因此大规模抓取 SERP 主要是分配流量和表现得像浏览器的游戏。本指南涵盖了实际策略——代理轮换、请求节奏、头部和解析——并诚实地说明了限制和规则。

为什么Google会阻止抓取工具

谷歌的搜索结果页面是网络上防御最严密的端点之一。从一个IP发送过多的自动请求,你将很快遇到验证码("异常流量"的插页),然后会被严厉封锁。检测依据包括每个IP的请求量、请求时间过于规律、缺失或机器人头部信息,以及缺乏正常浏览器行为。

两个事实设定了期望。首先,抓取谷歌的结果违反了其服务条款,谷歌提供官方API(自定义搜索JSON API和付费选项)供程序化访问——在抓取之前权衡这些。其次,没有任何技术能让自动化SERP收集永远可靠;防御措施会改变,任何承诺无检测谷歌抓取的人都是在夸大其词。好的工具所做的是降低封锁率,以便以可持续的速度收集数据。

实际上有帮助的策略

核心思想是看起来像许多普通用户,而不是一个不知疲倦的机器人:

  • 轮换IP — 在一个池中分散请求,以便没有单个地址超过Google的每IP容忍度。这是最大的杠杆。请参阅我们的轮换与固定会话指南。
  • 调整节奏并随机化 — 在请求之间添加抖动,而不是固定间隔;规律的时间间隔是一个明显的迹象。慢速比快速且被禁止更可持续。
  • 发送真实的头信息 — 一个真实的用户代理、接受语言和浏览器发送的头信息。合理地轮换它们,而不是重复使用一个静态集合。
  • 将CAPTCHA视为信号 — 当你遇到一个时,退后处理该IP,而不是强行通过。
  • 对于JS重的结果类型,优先使用无头浏览器 — 一些SERP特性在客户端渲染。

IP声誉很重要:Google对数据中心范围进行评分,因此重度SERP抓取是一个常见的案例,其中住宅IP的表现优于数据中心。s4m出售数据中心代理,适合轻量或节奏良好的收集;对于高容量的SERP工作,诚实地评估数据中心是否能跟上。

在 Python 中进行有节奏的代理请求

一个最小的示例:通过s4m代理路由,发送一个真实的头部,并控制请求的速度。在生产中在一个池中轮换代理和用户代理。

python
import time, random, requests

proxies = {
    "http":  "http://USER:PASS@proxy.s4m.online:3128",
    "https": "http://USER:PASS@proxy.s4m.online:3128",
}
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                  "AppleWebKit/537.36 (KHTML, like Gecko) "
                  "Chrome/122.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
}

for query in queries:
    r = requests.get("https://www.google.com/search",
                     params={"q": query, "num": 10},
                     headers=headers, proxies=proxies, timeout=20)
    if r.status_code == 429 or "unusual traffic" in r.text:
        # Back off this IP; rotate to the next proxy in your pool.
        time.sleep(60)
        continue
    parse_results(r.text)          # your parser (e.g. selectolax/bs4)
    time.sleep(random.uniform(3, 8))  # jitter, don't hammer
Share this page
FAQ

问题,已解答

抓取 Google 合法吗?

抓取公共搜索结果处于一个有争议的领域:它违反了谷歌的服务条款,并且根据管辖权和您收集的数据,可能存在法律风险。谷歌还提供官方 API 供程序化访问。首先考虑这些,并为大规模操作获取您自己的法律建议。

我需要住宅代理来抓取Google吗?

对于高流量,通常是的 — Google对数据中心范围进行评分,因此它们更早遇到验证码。数据中心代理(s4m出售的)可以用于较轻、节奏良好的收集。轮换和节奏与IP类型一样重要;没有代理可以使SERP抓取免受封锁。

我如何避免 '不寻常流量' CAPTCHA?

将其视为速率信号:轮换IP,在请求之间添加随机延迟,发送真实的浏览器头,并对任何受到挑战的IP进行回退,而不是立即重试。你可以减少CAPTCHA的频率;但在大规模下无法完全消除它们。

分配你的抓取流量

通过经过身份验证的 s4m 数据中心代理路由请求,轮换池,并控制您的作业速度。按需计费,提供免费的持续检查的代理列表供测试使用。匿名账户,接受加密货币。

人们通过搜索找到此页面

此页面回答的真实搜索短语 — 链接的短语打开详细覆盖它们的页面。