为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

心有法竹 2021-11-30 10:20:44
我在使用美丽的汤 (python3) 来获取最新股价时遇到问题import requestsfrom money import Moneyfrom 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 值的最佳方法是什么?
查看完整描述

3 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

价格在那里并且可以按类别选择(id 之后第二快的选择器方法)


import requests

from bs4 import BeautifulSoup as bs


res = requests.get('https://finance.yahoo.com/quote/VXUS?p=VXUS')   # https://finance.yahoo.com/quote/VTI?p=VTI

soup = bs(res.content, 'lxml')

price = soup.select_one('.Trsdu\(0\.3s\)').text

print(price)


查看完整回答
反对 回复 2021-11-30
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

import requests

from 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


查看完整回答
反对 回复 2021-11-30
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

import requests

from bs4 import BeautifulSoup

import json


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

soup = BeautifulSoup(response.content)

price = soup.findAll('script')

regularMarketPrice


a = price[-3].contents[0]


jjj = json.loads(a[111:-12])


jjj['context']['dispatcher']['stores']['StreamDataStore']['quoteData']['VTI']['regularMarketPrice']

这个可能对你有帮助,先拿到scriptdata,然后转成json,就可以找到你想要的数据了


查看完整回答
反对 回复 2021-11-30
  • 3 回答
  • 0 关注
  • 139 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信