如何使用BeautifulSoup查找类名为_XWk的谷歌快速回答框元素?
问题原因
- 你直接用
requests发起请求时没有携带浏览器标识,谷歌的反爬机制会直接返回和普通浏览器访问完全不同的页面结构,不会包含你要找的_XWk类元素,严重时甚至会直接返回验证码拦截页。 - 谷歌搜索结果页的类名都是动态生成的,
_XWk属于临时类名,会随着谷歌的页面迭代、访问地域、登录状态发生变化,不能作为稳定的定位依据。
修正方案
- 首先给请求添加合法的User-Agent头,模拟正常浏览器访问:
from bs4 import BeautifulSoup import requests # 添加浏览器标识头 headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36' } URL = 'https://www.google.com/search?q=when%20was%20trump%20born' content = requests.get(URL, headers=headers) soup = BeautifulSoup(content.text, 'html.parser') # 可先取消下行注释打印返回的页面源码,确认实际页面结构再调整定位规则 # print(soup.prettify()) print(soup.find_all("div", {"class": "_XWk"}))
- 不要硬编码动态类名作为定位条件:你可以先打印返回的页面源码,找到你需要的快速回答内容所属的稳定特征(比如特定的属性、嵌套结构),再写定位规则,避免谷歌更新页面结构后代码直接失效。
补充说明
谷歌搜索页面没有公开的稳定结构规则,类名、页面布局会不定期调整,该类爬取方案本身就有较高的维护成本。
内容的提问来源于stack exchange,提问作者RobbyDrSon
相关产品推荐
相关产品推荐

