【问题标题】:downloading file using python format becomes invalid使用python格式下载文件无效
【发布时间】:2017-03-28 19:24:13
【问题描述】:

嘿,我正在尝试从印度的 nse 网站下载股票数据

所以我为此使用python

链接是

 import urllib
   urllib.urlretrieve("https://www.nseindia.com/content/historical/DERIVATIVES/2016/JAN/fo01JAN2016bhav.csv.zip","fo01JAN2016bhav.csv.zip")

但是当我尝试打开下载的文件时,它说

compressed zipped file is invalid  

当我尝试通过简单地粘贴链接从网站正常下载时,下载的文件会被打开

链接

https://www.nseindia.com/content/historical/DERIVATIVES/2016/JAN/fo01JAN2016bhav.csv.zip

所以如果我尝试使用 urllib 2 我明白了

f=urllib2.urlopen('https://www.nseindia.com/content/historical/DERIVATIVES/2016/JAN/fo01JAN2016bhav.csv.zip')

Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    f=urllib2.urlopen('https://www.nseindia.com/content/historical/DERIVATIVES/2016/JAN/fo01JAN2016bhav.csv.zip')
  File "C:\Python27\lib\urllib2.py", line 127, in urlopen
    return _opener.open(url, data, timeout)
  File "C:\Python27\lib\urllib2.py", line 410, in open
    response = meth(req, response)
  File "C:\Python27\lib\urllib2.py", line 523, in http_response
    'http', request, response, code, msg, hdrs)
  File "C:\Python27\lib\urllib2.py", line 448, in error
    return self._call_chain(*args)
  File "C:\Python27\lib\urllib2.py", line 382, in _call_chain
    result = func(*args)
  File "C:\Python27\lib\urllib2.py", line 531, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 403: Forbidden

我该如何解决这个问题?

只有这个链接才会发生这种情况,我尝试从 imgur 下载图像并且代码工作正常

为什么我可以通过浏览器正常访问时出现http 403错误?

【问题讨论】:

  • 该站点进行了一些标题验证。设置user-agentaccept 似乎就足够了。

标签: python http urllib


【解决方案1】:

此链接提供了您要执行的操作的示例:https://stackoverflow.com/a/22776/6595777

发现另一个关于下载 zip 文件的问题。试试这个:

url = "http://www.nseindia.com/content/historical/DERIVATIVES/2016/JAN/fo01JAN2016bhav.csv.zip"
download = urllib2.urlopen(url)
with open(os.path.basename(url), "wb") as f:
    f.write(download.read())

我还没有评论权限,所以我发布作为答案。 我无法通过 https 浏览到您的链接,但 http 有效。您是否尝试过将脚本中的链接更改为 http?

您的脚本可能正在下载我在尝试使用 https (ERR_SSL_PROTOCOL_ERROR) 时得到的错误页面。这意味着您下载的内容将具有您指定的文件名(以 .zip 结尾)但是它实际上是html。这意味着它会给你 zip 文件无效的错误

【讨论】:

  • 是的,尝试更改为 http 仍然不起作用 其他链接(如图像)完全正常,只是此链接不起作用
  • 你得到的python 2错误是你不能访问链接(403:禁止)。我可以访问http链接,所以我认为它不应该被禁止。您是否为 urllib 和 urllib2 尝试过 http?
  • 我不知道为什么您无法通过 https 获取链接,但我已经尝试使用隐身模式以及不同的浏览器进行尝试。使用 urllib2 我收到此链接的 http 403 错误知道它是什么吗?是的,我也尝试过使用 urllib2 的 http,但得到了同样的错误
  • 403 可能是服务器生成的,以禁止自动客户端(例如您的脚本)在其User-Agent 标头中的某处使用“python”标识自己。
【解决方案2】:

嘿,我不知道为什么会在 urllib 和 urllib2 库中发生这种情况,但是当我使用 requests 库时

r = requests.get(url)
with open("code3.zip", "wb") as code:
    code.write(r.content)

成功了

这可能是我回答的间接解决方案

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-30
    • 2023-01-21
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2016-02-20
    相关资源
    最近更新 更多