如何用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
相关产品推荐
相关产品推荐

