'NoneType'对象在BeautifulSoup中没有属性'text'

时间:2018-12-30 18:07:47

标签: python web-scraping beautifulsoup

当我搜索“ 什么是2 + 2 ”时,我正在尝试抓取Google结果,但是以下代码返回了new_index = [0, 1, 2, 3, 4, 5, 6]。请帮助我实现所需的目标。

'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,但是我非常仔细地选择了此ID。我不要误会我也尝试过soup.find,但是都没有用。

3 个答案:

答案 0 :(得分:3)

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

我建议3种选择:

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

答案 1 :(得分:2)

下一次完全使用查询字符串。

import requests
from bs4 import BeautifulSoup
search="2%2B2"
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")
print(answer.text)

输出:

 4  

访问这些网址-它们不会返回相同的结果

https://www.google.com/search?q=What+is+2+2

https://www.google.com/search?q=2%2B2

https://www.google.com/search?q=2+2

答案 2 :(得分:0)

运行代码时,您可能会遇到AttributeError:

外壳程序:AttributeError:'NoneType'对象没有属性'text'

在这种情况下,请退后一步检查以前的结果。是否有任何值为“无”的项目?您可能已经注意到页面的结构不是完全统一的。那里可能有一个广告,其显示方式不同于正常的职位发布,可能会返回不同的结果

参考:https://realpython.com/beautiful-soup-web-scraper-python/#extract-text-from-html-elements