我正在嘗試學習如何抓取網站。目前我正在抓取:https ://finance.yahoo.com/screener/unsaved/f491bcb6-de80-4813-b50e-d6dc8e2f5623?dependentField=sector&dependentValues=Consumer Cyclical&offset=0&count=100
我正在嘗試更改,但它與stock_price.
所以,我嘗試使用不同的類:C($positiveColor)和C($negativeColor). 但是,當我使用這些類時,我收到一個錯誤AttributeError: 'NoneType' object has no attribute 'text'。
這是因為存在 0 且沒有明顯類的更改。我怎樣才能使用 BeatifulSoup 獲得 0?
是的,我知道我可以只測驗 None,然后我可以將其設定為 0,但我希望能夠使用 BeautifulSoup 來做到這一點。
謝謝 :)
import requests
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36', 'Accept' : 'text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language' : 'en-US,en;q=0.5', 'DNT' : '1', # Do Not Track Request Header 'Connection' : 'close'
}
from bs4 import BeautifulSoup
URL = 'https://finance.yahoo.com/screener/unsaved/f491bcb6-de80-4813-b50e-d6dc8e2f5623?dependentField=sector&dependentValues=Consumer Cyclical&offset=0&count=100'
page = requests.get(URL, headers=headers, timeout=5)
soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id="screener-results")
stock_ = results.find_all("tr", class_="simpTblRow")
for stock_ in stock_:
stock_symbol = stock_.find('a', class_='Fw(600) C($linkColor)')
stock_name = stock_.find('td', class_='Va(m) Ta(start) Px(10px) Fz(s)')
stock_price = stock_.find('td', class_='Va(m) Ta(end) Pstart(20px) Fw(600) Fz(s)')
stock_change = stock_.find('span', class_='C($positiveColor)')
if stock_change == None:
stock_change = stock_.find('span', class_='C($negativeColor)')
print(stock_symbol.text.strip() '\n' stock_name.text.strip() '\nCurrent Price: $' stock_price.text.strip() '\nChange: ' stock_change.text.strip(), end="\n"*2)
uj5u.com熱心網友回復:
在大多數情況下,最好不要選擇元素,class因為它們通常非常動態,如果可用,請關注更多“靜態”屬性。
如果發生更改,只需data-field使用<fin-streamer>
stock_change = stock_.find('fin-streamer', {'data-field':'regularMarketChange'})
例子
...
URL = 'https://finance.yahoo.com/screener/unsaved/f491bcb6-de80-4813-b50e-d6dc8e2f5623?dependentField=sector&dependentValues=Consumer Cyclical&offset=0&count=100'
page = requests.get(URL, headers=headers, timeout=5)
soup = BeautifulSoup(page.content, "html.parser")
results = soup.find(id="screener-results")
stock_ = results.find_all("tr", class_="simpTblRow")
for stock_ in stock_:
stock_symbol = stock_.find('td', {'aria-label':'Name'})
stock_name = stock_.find('td', {'aria-label':'Name'})
stock_price = stock_.find('fin-streamer', {'data-field':'regularMarketPrice'})
stock_change = stock_.find('fin-streamer', {'data-field':'regularMarketChange'})
print(stock_symbol.text.strip() '\n' stock_name.text.strip() '\nCurrent Price: $' stock_price.text.strip() '\nChange: ' stock_change.text.strip(), end="\n"*2)
輸出
...
Great Wall Motor Company Limited
Great Wall Motor Company Limited
Current Price: $15.80
Change: -0.51
Mahindra & Mahindra Limited
Mahindra & Mahindra Limited
Current Price: $10.00
Change: 0.00
Sime Darby Berhad
Sime Darby Berhad
Current Price: $0.5690
Change: 0.0050
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/442019.html
上一篇:Python中的Web抓取問題
