【问题标题】:python - urllib.error.HTTPError: HTTP Error 401: Unauthorizedpython - urllib.error.HTTPError:HTTP 错误 401:未经授权
【发布时间】:2017-07-14 03:06:21
【问题描述】:

我是 pyhton 新手,只是尝试从外部文件写入数据。我不知道我要去哪里错了。谁能帮我解决这个问题。 提前致谢。

from urllib import request

url = r'https://query1.finance.yahoo.com/v7/finance/download/AMD?period1=1497317134&period2=1499909134&interval=1d&events=history&crumb=HwDtuBHqtg0'

def download_csv(csv_url):

    csv = request.urlopen(csv_url)
    csv_data = csv.read
    csv_str = str(csv_data)
    file = csv_str.split('\\n')
    dest_url = r'appl.csv'
    wr = open(dest_url, 'w')
    for data in file:
        wr.write(data + '\n')
    wr.close()

download_csv(url)

【问题讨论】:

  • 你写的是csv.read而不是csv.read()
  • 如果您从浏览器访问该 URL,您将看到您需要一个身份验证 cookie 才能访问该资源
  • 我想这会对你有所帮助:Yahoo Finance URL not working

标签: python python-2.7 python-3.x yahoo-finance


【解决方案1】:

所以我在浏览器中运行了 URL,它清楚地表明您的 API 需要 cookie。

所以你必须提供一个适当的标头,通常使用 urllib 可以管理会话,但老实说,我会选择更用户友好的库,例如 requests python 库(HTTP for Humans)

例子:

s = requests.Session()

s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
r = s.get('http://httpbin.org/cookies')

print(r.text)
# '{"cookies": {"sessioncookie": "123456789"}}'

更多:http://docs.python-requests.org/en/master/user/advanced/#session-objects

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-20
    • 1970-01-01
    • 2014-03-10
    • 2014-06-24
    相关资源
    最近更新 更多