首页 > 解决方案 > “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)

唯一的问题是idin soup.find,但是我非常仔细地选择了这个 id。我不应该弄错。我也试过answer=soup.find('span',class_="cwcot gsrt"),但都没有奏效。

标签: pythonweb-scrapingbeautifulsoup

解决方案


解析网站时的一个大问题是,与所requests看到的相比,源代码在您的浏览器中看起来可能非常不同。不同之处在于 javascript,它可以在支持 javascript 的浏览器中极大地修改 DOM。

我建议3个选项:

  1. 用于requests获取页面,然后仔细检查 - 当页面由非 js 启用的代理检索时,该标记是否存在?
  2. 使用https://www.seleniumhq.org/作为您的代理 - 它本质上是一个功能齐全的浏览器,您可以通过编程方式控制它,包括 python。
  3. 使用谷歌的搜索 API 而不是尝试抓取 html

推荐阅读