请求:使用python 3下载一个excel文件(无效文字为int 16)

我是python的新手,我正在学习使用它来为我刮取一些数据,但由于某些原因,我无法下载excel文件,我不明白。 我想下载这个excel文件,当我在任何浏览器中打开这个链接时,它会尝试保存一个excel文件:

http://www5.registraduria.gov.co/CuentasClarasPublicoCon2014/Consultas/Candidato/Formulario5xls/2

基于以前的问题(请参阅从网上下载python中的Excel文件 )我在python 3中使用请求,如下所示:

import requests, os url="http://www5.registraduria.gov.co/CuentasClarasPublicoCon2014/Consultas/Candidato/Formulario5xls/2" print("Downloading...") requests.get(url) output = open('test.xls', 'wb') output.write(resp.content) output.close() print("Done!") 

我认为这个问题不是在test.xls被创build之后写入数据的那部分代码,而是一个空文件。 requests.get给了我下面的错误(后面还有几个):

 Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/packages/urllib3/response.py", line 417, in _update_chunk_length self.chunk_left = int(line, 16) ValueError: invalid literal for int() with base 16: b'' 

我也尝试使用urllib,但仍然失败。

看起来像这是一个已知的问题 。

一种解决方法是使用http 1.0 。 要做到这一点设置httplibvariables_http_vsn_http_vsn_str像这样。

对于Python 2

 import requests, os import httplib httplib.HTTPConnection._http_vsn = 10 httplib.HTTPConnection._http_vsn_str = 'HTTP/1.0' url="http://www5.registraduria.gov.co/CuentasClarasPublicoCon2014/Consultas/Candidato/Formulario5xls/2" print("Downloading...") resp = requests.get(url) with open('test.xls', 'wb') as output: output.write(resp.content) print("Done!") 

对于Python 3 httplib被重命名为http.client所以代码变成了

 import requests, os import http.client http.client.HTTPConnection._http_vsn = 10 http.client.HTTPConnection._http_vsn_str = 'HTTP/1.0' url="http://www5.registraduria.gov.co/CuentasClarasPublicoCon2014/Consultas/Candidato/Formulario5xls/2" print("Downloading...") resp = requests.get(url) with open('test.xls', 'wb') as output: output.write(resp.content) print("Done!")