使用雅虎财经的 beautifulsoup 进行屏幕抓取适用于除一只股票之外的所有股票

问题描述 投票:0回答:1

我已经尝试了好几天来解决这个问题,但已经没有想法了。我正在使用 Python3 和 Beautifulsoup 从雅虎财经获取股票价格。它适用于我到目前为止尝试过的大约一百种不同的股票,除了劳斯莱斯 RR.L 以外。 HTML 看起来与任何其他股票相同,但它不会检索任何数据,更不用说价格了。

这是我使用过的代码。我更改了第 3 行的股票代码以适应。我也尝试过几个用户代理,但这没有什么区别,而且我不太确定它会不会,因为我每天只进行 2 或 3 次查询。这可能与“.”有关吗?在股票代码中?

非常感谢您的任何建议

import requests
from bs4 import BeautifulSoup
url = f'https://finance.yahoo.com/quote/RR.L'
response = requests.get(url, headers={'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'})
soup = BeautifulSoup(response.text, 'html.parser')
    
# Find the price in the page
price_tag = soup.find('fin-streamer' ,{'data-field': 'regularMarketPrice'})
print(price_tag)

我试图改变 soup.find 命令,但我真的只是猜测。

python beautifulsoup
1个回答
0
投票

嗯,雅虎财经经常进行维护,所以你可以尝试这个 API 端点来检查它是否可用,这也会打印你想要的输出,

示例代码:

import requests

url = 'https://query1.finance.yahoo.com/v8/finance/chart/RR.L'
header = {
    "User-Agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:131.0) Gecko/20100101 Firefox/131.0"
}
resp = requests.get(url, headers=header).json()['chart']['result'][0]['meta']['regularMarketPrice']

print(resp)

输出:

538.8
© www.soinside.com 2019 - 2024. All rights reserved.