为了账号安全,请及时绑定邮箱和手机立即绑定

Beautiful Soup4 'NoneType' 对象没有属性 'text' 错误

Beautiful Soup4 'NoneType' 对象没有属性 'text' 错误

慕桂英3389331 2021-08-14 17:21:03
尝试从 Yahoo Finance 中抓取一些数字,但我一直为我的一个soup.find 函数获取一个AttributeError。代码:from bs4 import BeautifulSoup as soupimport requests#Switchsource = requests.get('https://finance.yahoo.com/quote/SWCH?p=SWCH&.tsrc=fin- srch').textsoup = soup(source, 'lxml')price = soup.find('span', class_=lambda x:x and set(x.split()).issuperset(set("Trsdu(0.3s) Fw(b) Fz(36px) Fw(b) D(b) Mb(-4px)".split())))downorup = soup.find('span', class_=lambda x:x and set(x.split()).issuperset(set("Trsdu(0.3s) Fw(500) Pstart(10px) Fz(24px) C($dataRed)".split())))print("Switch stock: " + price.text + ' ' + downorup.text)
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

在第二个查询中,“Fz(24px)”必须是“Fz(14px)”,并且不能有“Pstart(10px)”部分:

downorup = soup.find('span', class_=lambda x:x and set(x.split())\
               .issuperset(set("Trsdu(0.3s) Fw(500) Fz(14px) C($dataRed)".split())))

通常,您正在使用一种非常危险的方法来识别您的数据。如果页面的格式发生变化,您将无法再找到这些字段。"data-reactid"似乎是一个更可靠的标记。


查看完整回答
反对 回复 2021-08-14
?
当年话下

TA贡献1890条经验 获得超9个赞

错误很可能是在print语句中抛出的。

如果代码无法找到pricedownorup- 它将有一个值 None。在这种情况下,您正在尝试price.text, downorup.text从引发异常的 None 对象访问属性。

添加对 None 的检查,例如:

if price and downorup:
    print("Switch stock: " + price.text + ' ' + downorup.text)

这将去print陈述仅当pricedownorup不无。


查看完整回答
反对 回复 2021-08-14
  • 2 回答
  • 0 关注
  • 213 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信