当我搜索“ 什么是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
,但是都没有用。
答案 0 :(得分:3)
解析网站时的一大难题是,与requests
相比,源代码在您的浏览器中看起来非常不同。区别在于javascript,它可以在支持javascript的浏览器中极大地修改DOM。
我建议3种选择:
requests
获取页面,然后仔细检查-当未启用js的代理检索页面时,该标签是否存在?答案 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
答案 2 :(得分:0)
运行代码时,您可能会遇到AttributeError:
外壳程序:AttributeError:'NoneType'对象没有属性'text'
在这种情况下,请退后一步检查以前的结果。是否有任何值为“无”的项目?您可能已经注意到页面的结构不是完全统一的。那里可能有一个广告,其显示方式不同于正常的职位发布,可能会返回不同的结果
参考:https://realpython.com/beautiful-soup-web-scraper-python/#extract-text-from-html-elements。