Почему иногда я получаю urllib.error.HTTPError: Ошибка HTTP 401: несанкционированная ошибка при получении данных о запасах из Yahoo? - PullRequest
0 голосов
/ 10 октября 2019

Иногда я могу получить данные о запасах от Yahoo, иногда получаю ошибку: urllib.error.HTTPError: Ошибка HTTP 401: несанкционированная ошибка

hsi - это фондовый индекс hengsheng, На моем локальном компьютере каждые 10 обращаются к get_hsiфункция с x=get_hsi(), примерно 5 раз, я получаю правильный результат.
Интересно, почему код не может выполняться каждый раз успешно, есть ли какая-то ошибка с кодом или какая-то ошибка с моей настройкой или установка модуля?

import os ,io,re
import pandas as pd
import time,datetime
import http.cookiejar
import urllib.request
def get_hsi():
    start=0
    end=int(time.time())
    symbol="^hsi"
    target1 = "https://finance.yahoo.com/quote/{}/?p={}".format(symbol,symbol)
    fname_cookie = os.path.join('/tmp','cookies.txt')
    cookie = http.cookiejar.MozillaCookieJar(fname_cookie)
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    response1 = opener.open(target1).read().decode('utf-8')
    cookie.save()
    crumb = re.findall('"CrumbStore":{"crumb":"(.+?)"}', response1)[0]
    cookie.load(fname_cookie)
    handler = urllib.request.HTTPCookieProcessor(cookie)
    opener = urllib.request.build_opener(handler)
    target2 = "https://query1.finance.yahoo.com/v7/finance/download/{0}?period1={1}&period2={2}&interval=1d&events=history&crumb={3}".format(symbol,start,end,crumb)
    response2 = opener.open(target2).read().decode('utf-8')
    df = pd.read_csv(io.StringIO(response2),sep=",")
    os.remove(fname_cookie)
    return  df 
...