慕桂英3389331
2021-08-14 17:21:03
嘗試從 Yahoo Finance 中抓取一些數(shù)字,但我一直為我的一個(gè)soup.find 函數(shù)獲取一個(gè)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貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
在第二個(gè)查詢中,“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())))
通常,您正在使用一種非常危險(xiǎn)的方法來識別您的數(shù)據(jù)。如果頁面的格式發(fā)生變化,您將無法再找到這些字段。"data-reactid"
似乎是一個(gè)更可靠的標(biāo)記。

當(dāng)年話下
TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
錯誤很可能是在print
語句中拋出的。
如果代碼無法找到price
/ downorup
- 它將有一個(gè)值 None。在這種情況下,您正在嘗試price.text, downorup.text
從引發(fā)異常的 None 對象訪問屬性。
添加對 None 的檢查,例如:
if price and downorup: print("Switch stock: " + price.text + ' ' + downorup.text)
這將去print
陳述僅當(dāng)price
和downorup
不無。
添加回答
舉報(bào)
0/150
提交
取消