You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的requests实现谷歌搜索?遇CAPTCHA拦截该如何解决?

解决谷歌搜索自动化请求被拦截的问题

Hey there, let's figure out why you're hitting that Google anti-bot page and how to adjust your code to avoid it.

为什么会触发拦截?

Google的反爬机制相当严格——哪怕你加了基础的用户代理,自动化请求还是很容易被识别,因为它缺少真实用户浏览会话的上下文(比如持久Cookie、自然的请求间隔、必要的额外参数)。你当前的代码发送的是极简请求,很容易被标记为异常流量。

你遗漏的关键点和修正方案

这里是让请求更贴近真实用户行为的关键修复和最佳实践:

  • 修正URL语法:你的URL里用了&(HTML转义字符),在Python构建原生HTTP URL时,要换成普通的&。
  • 维持会话Cookie:谷歌会在首次访问时设置验证用户身份的Cookie,要确保会话在后续请求中保留这些Cookie。
  • 添加请求延迟:人类不会瞬间发起连续请求,在请求之间加一点延迟,模拟自然浏览节奏。
  • 更新用户代理:使用最新的浏览器用户代理字符串,旧版本的UA更容易被标记。
  • 补充更多请求头:比如添加Referer头模拟从谷歌主页跳转过来,或者Cache-Control头匹配真实浏览器的行为。

修改后的代码示例

import requests
import time
from bs4 import BeautifulSoup

headers_Get = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Language': 'en-US,en;q=0.5',
    'Accept-Encoding': 'gzip, deflate, br',
    'DNT': '1',
    'Connection': 'keep-alive',
    'Upgrade-Insecure-Requests': '1',
    'Referer': 'https://www.google.com/'
}

def google(q):
    s = requests.Session()
    # 先发起一次空请求获取谷歌的会话Cookie
    s.get('https://www.google.com/', headers=headers_Get)
    time.sleep(2)  # 小延迟模拟人类操作
    
    q = '+'.join(q.split())
    url = f'https://www.google.com/search?q={q}&ie=utf-8&oe=utf-8&hl=en'
    r = s.get(url, headers=headers_Get)
    return r.text

result = google('"apple"')
# 现在可以用BeautifulSoup解析结果
soup = BeautifulSoup(result, 'html.parser')

更可靠的长期方案:使用谷歌官方API

如果你的项目需要持续稳定的谷歌搜索访问,谷歌自定义搜索API是最优选择。它专为自动化访问设计,完全不会触发反爬拦截,还能直接返回结构化结果,不需要做网页解析。免费版有请求次数限制,但对于长期项目来说,比网页爬取可靠得多。

内容的提问来源于stack exchange,提问作者John

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:28:20