使用BeautifulSoup实现Google网页抓取时返回None的技术求助
排查Google搜索结果抓取返回None的问题
我帮你分析下问题所在,主要有两个核心原因,以及对应的解决办法:
问题1:请求被Google识别为爬虫,返回非结果页面
直接用requests.get()发起请求时,没有携带浏览器标识,Google会把你识别为爬虫,返回的页面里根本没有你要找的搜索结果内容,自然找不到目标元素,返回None。
问题2:目标元素的Class名称已失效
Google会频繁调整搜索页面的HTML结构,你用的Z0LcW这个Class现在已经不是展示即时答案的元素类名了,就算拿到正常页面,也匹配不到内容。
修正后的代码
下面是调整后的代码,解决了上述两个问题:
import time from bs4 import BeautifulSoup import requests search = input("What do you want to ask: ") search = search.replace(" ", "+") link = f"https://www.google.com/search?q={search}" # 模拟浏览器请求头,避免被反爬 headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" } print(link) # 携带请求头发起请求 source = requests.get(link, headers=headers).text soup = BeautifulSoup(source, "html.parser") # 先尝试匹配Google常用的即时答案类gsrt,若失败再尝试另一个常用类 answer_element = soup.find("div", class_="gsrt") if not answer_element: answer_element = soup.find("div", class_="BNeawe iBp4i AP7Wnd") if answer_element: print(answer_element.text.strip()) else: print("未找到答案元素,可能Google页面结构又更新了,请检查最新的HTML结构")
额外提示
如果后续再次出现类似问题,你可以自己用浏览器的开发者工具(F12)查看搜索结果页面的HTML:
- 搜索目标问题后,右键点击答案内容,选择「检查」
- 在开发者工具中找到对应元素的Class或其他属性,替换代码中的选择器即可。
内容的提问来源于stack exchange,提问作者Naufil Muhammad
相关产品推荐
相关产品推荐

