尝试从 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
提交
取消