gpt4 book ai didi

python - 如何从yahoo finance获取最大历史价格数据?

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

我想通过yahoo finance的scrapy获取最大历史价格数据。
这里是 fb(facebook) 最大历史价格数据的 url。

https://query1.finance.yahoo.com/v7/finance/download/FNMA?period1=221115600&period2=1508472000&interval=1d&events=history&crumb=1qRuQKELxmM

为了写一个股票价格网络爬虫,有两个问题我无法解决。
1.参数period1如何获取?
你可以在网页中手动获取它,只需单击max。
如何用python代码获取参数?
不同的股票有不同的 period1 值。

enter image description here

2.如何自动创建参数crumb=1qRuQKELxmM,不同的股票有不同的crumb值?
这是我使用 scrapy 框架的最大库存历史数据。

import scrapy

class TestSpider(scrapy.Spider):
name = "quotes"
allowed_domains = ["finance.yahoo.com"]

def __init__(self, *args, **kw):
self.timeout = 10

def start_requests(self):
stockName = get-it and ommit the codes
for stock in stockName:
period1 = how to fill it
crumb = how to fill it
per_stock_max_data = "https://query1.finance.yahoo.com/v7/finance\
download/"+stock+"?period1="+period1+"&period2=1508472000&\
interval=1d&events=history&"+"crumb="crumb
yield scrapy.Request(per_stock_max_data,callback=self.parse)

def parse(self, response):
content = response.body
target = response.url
#do something

如何在我的网络爬虫框架中填补上面的空白?

最佳答案

据我所知,您想下载特定代码的所有可能数据。因此,要做到这一点,您实际上不需要提供 period1 参数,如果您在 period1 的位置提供 0,则 Yahoo API 会将最早的日期作为默认值。

要使用您在问题中显示的方式下载报价,很遗憾,我们必须处理 cookie。我将让自己在不使用 Scrapy 的情况下提供解决方案,只需要 ticker 本身:

def get_yahoo_ticker_data(ticker):
res = requests.get('https://finance.yahoo.com/quote/' + ticker + '/history')
yahoo_cookie = res.cookies['B']
yahoo_crumb = None
pattern = re.compile('.*"CrumbStore":\{"crumb":"(?P<crumb>[^"]+)"\}')
for line in res.text.splitlines():
m = pattern.match(line)
if m is not None:
yahoo_crumb = m.groupdict()['crumb']
cookie_tuple = yahoo_cookie, yahoo_crumb

current_date = int(time.time())
url_kwargs = {'symbol': ticker, 'timestamp_end': current_date,
'crumb': cookie_tuple[1]}
url_price = 'https://query1.finance.yahoo.com/v7/finance/download/' \
'{symbol}?period1=0&period2={timestamp_end}&interval=1d&events=history' \
'&crumb={crumb}'.format(**url_kwargs)


response = requests.get(url_price, cookies={'B': cookie_tuple[0]})

return pd.read_csv(StringIO(response.text), parse_dates=['Date'])

如果您确实需要最早的日期,那么您可以使用上面的代码并从响应中提取第一个日期。

get_yahoo_ticker_data(ticker='AAPL')

我知道网络抓取不是一个有效的选择,但它是我们唯一的选择,因为雅虎已经停用了所有 API。您可能会找到一些第三方解决方案,但它们都在其源代码中使用了抓取,并且它们添加了一些额外的样板代码,从而降低了整体性能。

关于python - 如何从yahoo finance获取最大历史价格数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46848323/

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