gpt4 book ai didi

python - 使用 Python 从 Yahoo Finance 抓取历史数据

转载 作者:太空宇宙 更新时间:2023-11-03 13:10:45 25 4
gpt4 key购买 nike

你们中的一些人现在可能已经知道,Yahoo! Finance 已停止使用其用于股票市场数据的 API。虽然我知道 fix-yahoo-finance 解决方案的存在,但我试图通过直接从 Yahoo 抓取历史数据来为我的代码实现一个更稳定的解决方案。

所以这是我目前拥有的:

import requests
from bs4 import BeautifulSoup

page = requests.get("https://finance.yahoo.com/quote/AAPL/history?period1=345423600&period2=1495922400&interval=1d&filter=history&frequency=1d")
soup = BeautifulSoup(page.content, 'html.parser')
soup
print(soup.prettify())

要从 Yahoo 表中获取数据,我可以这样做:

c=soup.find_all('tbody')
print(c)

我的问题是,如何将“c”变成更好的数据框?谢谢!

最佳答案

我写这个是为了直接从下载 csv 链接获取 YF 的历史数据。它需要发出两个请求,一个获取 cookie 和 crumb,另一个获取数据。它返回一个 Pandas 数据框

import re
from io import StringIO
from datetime import datetime, timedelta

import requests
import pandas as pd


class YahooFinanceHistory:
timeout = 2
crumb_link = 'https://finance.yahoo.com/quote/{0}/history?p={0}'
crumble_regex = r'CrumbStore":{"crumb":"(.*?)"}'
quote_link = 'https://query1.finance.yahoo.com/v7/finance/download/{quote}?period1={dfrom}&period2={dto}&interval=1d&events=history&crumb={crumb}'

def __init__(self, symbol, days_back=7):
self.symbol = symbol
self.session = requests.Session()
self.dt = timedelta(days=days_back)

def get_crumb(self):
response = self.session.get(self.crumb_link.format(self.symbol), timeout=self.timeout)
response.raise_for_status()
match = re.search(self.crumble_regex, response.text)
if not match:
raise ValueError('Could not get crumb from Yahoo Finance')
else:
self.crumb = match.group(1)

def get_quote(self):
if not hasattr(self, 'crumb') or len(self.session.cookies) == 0:
self.get_crumb()
now = datetime.utcnow()
dateto = int(now.timestamp())
datefrom = int((now - self.dt).timestamp())
url = self.quote_link.format(quote=self.symbol, dfrom=datefrom, dto=dateto, crumb=self.crumb)
response = self.session.get(url)
response.raise_for_status()
return pd.read_csv(StringIO(response.text), parse_dates=['Date'])

你可以这样使用它:

df = YahooFinanceHistory('AAPL', days_back=30).get_quote()

关于python - 使用 Python 从 Yahoo Finance 抓取历史数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44225771/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com