使用BeautifulSoup爬取谷歌搜索结果返回None的问题求助
问题分析与解决方法
核心问题:谷歌动态生成的CSS类名不可靠
你复制的LrzXr kno-fv wHYlTd z8gr9e这类类名是谷歌动态生成的,每次请求页面都会随机变化,依赖固定类名查找元素必然返回None。谷歌为了反爬,会频繁更新这类无意义的类名,不能用它来定位目标内容。
替代方案:基于语义化属性定位元素
谷歌知识卡片里的信息会附带语义化的data-attrid属性,这个属性比动态类名稳定得多,可以用来精准定位出生日期元素。
修改后的代码示例:
import requests from bs4 import BeautifulSoup headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.5735.134 Safari/537.36"} source_code = requests.get("https://www.google.com/search?q=Guillermo+Saccomanno", headers=headers) plain_text = source_code.text soup = BeautifulSoup(plain_text, features="html.parser") # 通过语义化属性定位出生日期所在的父元素 birth_date_container = soup.find("div", {"data-attrid": "kc:/people/person:birth date"}) if birth_date_container: # 提取子span标签中的文本内容 birth_info = birth_date_container.find("span").get_text(strip=True) print(birth_info) else: print("未找到目标出生信息")
额外注意事项
- 运行代码前可以先打印
plain_text内容,确认谷歌是否返回了正常的搜索结果(如果触发反爬,会返回人机验证页面,此时需要添加浏览器的Cookie请求头,或增加请求间隔模拟人类行为)。 - 若搜索结果中没有知识卡片,也会返回
None,这种情况可以尝试调整搜索关键词,比如加上"birth date"后缀。
内容的提问来源于stack exchange,提问作者チェズ
相关产品推荐
相关产品推荐

