【问题标题】:beautiful soup with error : 'NoneType' object has no attribute 'text'美丽的汤有错误:“NoneType”对象没有属性“文本”
【发布时间】:2018-07-19 13:54:45
【问题描述】:

我必须首先说我是一个关于 Beautifulsoup 的初学者。 我确实尝试在几个网站上收集数据(在这种情况下是最新的难度值)以便练习,但除了这个错误之外我无法得到任何结果/值:'NoneType' object has no attribute 'text'

https://www.quandl.com/data/BCHAIN/DIFF-Bitcoin-Difficulty

这是我正在使用的代码:

quote_page = 'https://www.quandl.com/data/BCHAIN/DIFF-Bitcoin-Difficulty'
page = urllib2.urlopen(quote_page)

soup = BeautifulSoup(page, 'html.parser')

value_box = soup.find('div', {'class':'latest-value'})
value = value_box.text

我一直在寻找类似的错误,可能是因为 value_box 为空或 None。但是我不知道如何适应它。

非常感谢您的支持:)

【问题讨论】:

  • soup.find() 如果未找到元素,则返回 None
  • 那么当value_box 不存在(不存在于从 URL 返回的 HTML 中)时应该发生什么?
  • 您可以随时查看if value_box is not None
  • 该页面使用 AJAX 加载数据。 urllib2 不是浏览器,不会执行附加到页面的 Javascript,因此您加载的 HTML 不包含您看到的数据。只需从 quandl.com/api/v3/datasets/BCHAIN/DIFF/… 加载 JSON。这是页面用来将数据加载到浏览器中的 URL。
  • 如何从网站获取 JSON?

标签: python beautifulsoup attributes nonetype


【解决方案1】:

或者,您可以尝试使用任何浏览器模拟器(如 selenium)来执行相同的操作。以下是您可以处理的方法:

from selenium.webdriver import Chrome as browser
from contextlib import closing
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

with closing(browser()) as wd:
    wait = WebDriverWait(wd, 10)
    wd.get('https://www.quandl.com/data/BCHAIN/DIFF-Bitcoin-Difficulty')
    item = wait.until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR,".latest-value-item .latest-value")))[1]
    print(item.text)

输出:

2,874,674,234,420

【讨论】:

  • 感谢您的帮助。如前所述,我是新手,我不知道如何在笔记本中为 python 2 安装 selenium 有什么建议吗?
猜你喜欢
  • 2020-11-09
  • 1970-01-01
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多