python - “NoneType”对象在 BeautifulSoup 中没有属性“文本”
问题描述
当我搜索“什么是 2+2 ”时,我试图抓取 Google 结果,但以下代码正在返回'NoneType' object has no attribute 'text'
。请帮助我实现所需的目标。
text="What is 2+2"
search=text.replace(" ","+")
link="https://www.google.com/search?q="+search
headers={'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36'}
source=requests.get(link,headers=headers).text
soup=BeautifulSoup(source,"html.parser")
answer=soup.find('span',id="cwos")
self.respond(answer.text)
唯一的问题是id
in soup.find
,但是我非常仔细地选择了这个 id。我不应该弄错。我也试过answer=soup.find('span',class_="cwcot gsrt")
,但都没有奏效。
解决方案
解析网站时的一个大问题是,与所requests
看到的相比,源代码在您的浏览器中看起来可能非常不同。不同之处在于 javascript,它可以在支持 javascript 的浏览器中极大地修改 DOM。
我建议3个选项:
- 用于
requests
获取页面,然后仔细检查 - 当页面由非 js 启用的代理检索时,该标记是否存在? - 使用https://www.seleniumhq.org/作为您的代理 - 它本质上是一个功能齐全的浏览器,您可以通过编程方式控制它,包括 python。
- 使用谷歌的搜索 API 而不是尝试抓取 html
推荐阅读
- typescript - 使用 rxjs 运算符延迟订阅后输出
- firebase - 我有一个 Firestore 数据库,在我的 Flutter 应用程序中我检索到了我需要的 docID。如何检索文档 usign docID 的特定字段?
- terraform - Terraform Vsphere 为多个“network_interface”设置不同的 ipv4_gateway
- flutter - 无法运行颤振医生,颤振酒吧获取等
- salesforce - Visualforce 页面内的 ZoidComponent?
- r - 异常返回 R
- javascript - 纯 PHP 如何在没有 curl 的情况下读取远程 url 的元标记
- java - 无法使用带有 java chrome 的 selenium 的窗口句柄切换到弹出窗口
- heatmap - 在同一张地图中添加带有 Folium 的热图和制造商图层
- java - 终端命令/可执行文件仅在一个目录中有效,在任何其他目录中出错