我试图从此url下载.csv文件以获取股票的历史记录。这是我的代码:
const transformedProfilesData = profilesData.reduce((array, object) => {
const profile = {...object.profile}
const photos = object.photo_details.photos.map(photo => photo)
profile.photos = photos
array.push(profile)
return array
}, [])
但是当我打开文件history_of_stock.csv时,我就找到了这个:
import requests
r = requests.get("https://query1.finance.yahoo.com/v7/finance/download/CHOLAFIN.BO?period1=1514562437&period2=1517240837&interval=1d&events=history&crumb=JaCfCutLNr7")
file = open(r"history_of_stock.csv", 'w')
file.write(r.text)
file.close()
我找不到任何可以解决我问题的东西。我发现这个帖子中有人有同样的问题,除了它在C#中:C# Download price data csv file from https instead of http
答案 0 :(得分:1)
确实有这样的服务,但它是discontinued。
现在你可以做你想做的事,但首先你需要得到一个Cookie。 On this post有一个如何做的例子。 基本上,首先你需要做一个无用的请求来获取Cookie,之后,有了这个Cookie,你可以查询你真正需要的任何其他内容。
还有一篇关于another service的帖子可能会让您的生活更轻松。
还有一个Python module可以解决这个不便和代码,以显示没有它的方法。
答案 1 :(得分:0)
为补充先前的答案并提供具体的完整代码,我编写了一个脚本,该脚本可完成获取Yahoo Finance中历史股价的任务。试图尽可能简单地编写它。概括一下:在使用请求获取URL时,在许多情况下,您无需担心碎屑或cookie。但是,使用Yahoo Finance,您需要获取面包屑和cookie。一旦获得饼干,就可以了!确保在requests.get
呼叫上设置超时。
import re
import requests
import sys
from pdb import set_trace as pb
symbol = sys.argv[-1]
start_date = '1442203200' # start date timestamp
end_date = '1531800000' # end date timestamp
crumble_link = 'https://finance.yahoo.com/quote/{0}/history?p={0}'
crumble_regex = r'CrumbStore":{"crumb":"(.*?)"}'
cookie_regex = r'set-cookie: (.*?);'
quote_link = 'https://query1.finance.yahoo.com/v7/finance/download/{}?period1={}&period2={}&interval=1d&events=history&crumb={}'
link = crumble_link.format(symbol)
session = requests.Session()
response = session.get(link)
# get crumbs
text = str(response.content)
match = re.search(crumble_regex, text)
crumbs = match.group(1)
# get cookie
cookie = session.cookies.get_dict()
url = "https://query1.finance.yahoo.com/v7/finance/download/%s?period1=%s&period2=%s&interval=1d&events=history&crumb=%s" % (symbol, start_date, end_date, crumbs)
r = requests.get(url,cookies=session.cookies.get_dict(),timeout=5, stream=True)
out = r.text
filename = '{}.csv'.format(symbol)
with open(filename,'w') as f:
f.write(out)