用beautifulsoup拉动当前股价(雅虎)

我在使用美丽的汤 (python3) 来获取最新股价时遇到问题

http://img.mukewang.com/61a58a910001c10b10480531.jpg

import requests

from money import Money

from bs4 import BeautifulSoup 


response = requests.get("https://finance.yahoo.com/quote/VTI?p=VTI")

soup = BeautifulSoup(response.content, "lxml")

price = soup.find('span', attrs = {"data-reactid": "34"})

这会带回“无”值。有什么我想念的吗?使用不同的页面,以下效果很好:


response = requests.get("https://finance.yahoo.com/lookup?s=VTI")

soup = BeautifulSoup(response.content,"lxml")

price = soup.find('td', attrs={"data-reactid": "59"})

不幸的是,该搜索页面并不总是与第一个结果完美匹配(搜索 VXUS 会将 vxus 带回作为第二个结果)所以我希望找到一些始终有效的东西,我认为从实际页面中提取会工作得最好。


拉动 141.28 值的最佳方法是什么?


心有法竹
浏览 140回答 3
3回答

慕妹3242003

价格在那里并且可以按类别选择(id 之后第二快的选择器方法)import requestsfrom bs4 import BeautifulSoup as bsres = requests.get('https://finance.yahoo.com/quote/VXUS?p=VXUS')   # https://finance.yahoo.com/quote/VTI?p=VTIsoup = bs(res.content, 'lxml')price = soup.select_one('.Trsdu\(0\.3s\)').textprint(price)

蝴蝶不菲

import requestsfrom bs4 import BeautifulSoup response = requests.get("https://finance.yahoo.com/quote/VTI?p=VTI")soup = BeautifulSoup(response.content, "lxml")for stock in  soup.find_all('span', class_='Trsdu(0.3s) Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(b)'):    print(stock.get_text())这将返回 141.28

慕盖茨4494581

import requestsfrom bs4 import BeautifulSoupimport jsonresponse = requests.get("https://finance.yahoo.com/quote/VTI?p=VTI")soup = BeautifulSoup(response.content)price = soup.findAll('script')regularMarketPricea = price[-3].contents[0]jjj = json.loads(a[111:-12])jjj['context']['dispatcher']['stores']['StreamDataStore']['quoteData']['VTI']['regularMarketPrice']这个可能对你有帮助,先拿到scriptdata,然后转成json,就可以找到你想要的数据了
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python