【问题标题】:'NoneType' object has no attribute 'text' in BeautifulSoup“NoneType”对象在 BeautifulSoup 中没有属性“文本”
【发布时间】:2018-12-30 18:07:46
【问题描述】:

我在搜索“什么是 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)

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

【问题讨论】:

  • 未找到 ID 为 cwos<span>find() 的结果变为 None。你应该处理这种情况。
  • 我无法通过在浏览器中输入您的链接来查看该 ID。预期返回的文本是什么?

标签: python web-scraping beautifulsoup


【解决方案1】:

下次按原样使用查询字符串。

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】:

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

    我建议 3 个选项:

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

    【讨论】:

    • Use Google's search API: 你指的是什么API? AFAIK,Google 还没有 well over 8 years 的公共搜索 API。
    • 男孩,我觉得自己老了吗,我不知道 o.O
    【解决方案3】:

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

    shell: AttributeError: 'NoneType' 对象没有属性 'text'

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      相关资源
      最近更新 更多