Работя по проект, включващ изтегляне на исторически данни за цените на акциите от yahoo finance. Стъпка в този процес включва определяне на правилната бисквитка и трохи, които да се използват с url за изтегляне на данните. Кодът, който имам в момента, работи само понякога, т.е. данните за запасите се извличат без никакви проблеми и ще се провалят при привидно произволни итерации. В пълния проблем изтеглям данни за множество акции. Проблемът, с който се сблъсквам, е липса на последователност при извличането на данните. Сблъсквам се с проблем при данните, които се връщат
b'{\n"finance":{\n"error":{\n"code":"Unauthorized",\n"description":"Invalid cookie"\n}\n}\n}\n
Така че, аз вярвам, че проблемът се крие в набора за извличане на бисквитки.
За да тествам проблема, написах малък скрипт, който се опитва да изтегли данни за една и съща стока в продължение на 20 итерации. Когато изпълнявам това, обикновено ще имам около 18 итерации, които работят правилно, а другите няма да работят. Итерациите, в които това се случва, се променят всеки път, когато изпълня тестовия скрипт.
Ето тестовия код, който използвах досега:
import requests
import time
import re
for k in range(20):
symbol='AMZN'
url="https://finance.yahoo.com/quote/%s/?p=%s" % (symbol, symbol)
r = requests.get(url, timeout=10)
cookie = r.cookies
lines = r.content.decode('latin-1').replace('\\', '')
lines = lines.replace('}', '\n')
lines = lines.split('\n')
for l in lines:
if re.findall(r'CrumbStore', l):
crumb = l.split(':')[2].strip('"')
start_date = int(int(time.time())-15*86400)
end_date = int(time.time())
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, crumb)
response = requests.get(url, cookies=cookie, timeout=10)
for block in response.iter_content(1024):
print(block)
print(k)
Очаквам това да връща данните за цената на акциите всеки път, подобно на:
b'Date,Open,High,Low,Close,Adj Close,Volume\n2019-06-06,1737.709961,1760.000000,1726.130005,1754.359985,1754.359985,3689300\n2019-06-07,1763.699951,1806.250000,1759.489990,1804.030029,1804.030029,4808200\n2019-06-10,1822.000000,1884.869995,1818.000000,1860.630005,1860.630005,5371000'
понякога обаче получавам грешката. Има ли по-надежден начин да се гарантира, че данните са изтеглени правилно? Знам, че мога да го осъществя и да го изтегля, но кодът е ненадежден.
Имайте предвид, че това е подобно на опит за достъп до данните с лоша бисквитка/трошка директно в браузър, например чрез url:
https://query1.finance.yahoo.com/v7/finance/download/AMZN?period1=1559367165&period2=1560663165&interval=1d&events=history&crumb=ODCkS0u002FOZyL
Благодаря ти за помощта.