我在使用漂亮的汤(python3)来获取最新股价时遇到问题
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值的最佳方法是什么?
答案 0 :(得分:3)
价格在那里,可以按类别选择(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)
答案 1 :(得分:1)
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
答案 2 :(得分:0)
因此可以解决,但是由于这只是一个有趣的项目,因此以下工作可以找到正确的答案(尽管我希望有一个适当的,可扩展的解决方案)
for (let i = 0; i < 3; i++) {
if($('#specsContainer > div.specs__title > h4', html).eq(i).text() == "Fruits"){
console.log($('#specsContainer > div.specs__table', html).eq(i).html());
};
if($('#specsContainer > div.specs__title > h4', html).eq(i).text() == "Vegetables"){
console.log($('#specsContainer > div.specs__table', html).eq(i).html());
};
};
答案 3 :(得分:0)
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']
这可能对您有帮助,首先获取脚本数据,然后将其转换为json,即可找到所需的数据
答案 4 :(得分:0)
这是一个适用于我的解决方案,但是如果网站元素已更新,class_
中的元素可能会更改,因此如果出现以下情况,我将复制并粘贴网站检查中的最新元素:解决方案失败。
import requests
from bs4 import BeautifulSoup as bs
res = requests.get('https://finance.yahoo.com/quote/SQQQ/')
soup = bs(res.content, 'lxml')
for stock in soup.find_all('span', class_='Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)'):
print(stock.get_text())