无法用BeautifulSoup爬取谷歌搜索结果,返回空列表求助
排查谷歌搜索结果爬取返回空列表的问题
嘿,我来帮你分析下为啥你的代码返回空列表~主要问题出在谷歌的反爬机制和请求头缺失上,具体原因和解决办法如下:
核心原因:谷歌的反爬检测
谷歌会识别非浏览器发出的请求,你的代码直接用requests.get(url)发送请求,没有携带任何浏览器标识的请求头,谷歌会判定这是机器人访问,返回的页面根本不是正常的搜索结果页面——自然找不到class='g'的容器元素了。
解决办法:添加请求头模拟浏览器访问
你需要给请求加上User-Agent等请求头,让谷歌认为这是浏览器发出的正常请求。具体修改步骤如下:
- 先获取你自己浏览器的
User-Agent:打开浏览器的开发者工具(F12),在网络请求里随便找一个请求,查看它的Request Headers里的User-Agent字段,复制下来。 - 在请求时把这个头信息传入
requests.get()方法。
修改后的代码如下:
from bs4 import BeautifulSoup import requests keyWord = input("Input Your KeyWord :") url = f'https://www.google.com/search?q={keyWord}' # 添加请求头,这里替换成你自己的User-Agent headers = { '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' } src = requests.get(url, headers=headers).text soup = BeautifulSoup(src, 'lxml') container = soup.findAll('div', class_='g') print(container)
额外提醒
另外还要注意:谷歌的页面结构可能会随时调整,如果之后再出现类似问题,也可以检查class='g'这个选择器是否还适用——你可以用浏览器开发者工具查看当前搜索结果页面的元素结构,确认容器的类名或标签有没有变化。
内容的提问来源于stack exchange,提问作者Arnav Gupta
相关产品推荐
相关产品推荐

