尝试从 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"似乎是一个更可靠的标记。
当年话下
TA贡献1890条经验 获得超9个赞
错误很可能是在print语句中抛出的。
如果代码无法找到price/ downorup- 它将有一个值 None。在这种情况下,您正在尝试price.text, downorup.text从引发异常的 None 对象访问属性。
添加对 None 的检查,例如:
if price and downorup:
print("Switch stock: " + price.text + ' ' + downorup.text)这将去print陈述仅当price和downorup不无。
添加回答
举报
0/150
提交
取消
