我使用此代码(只是其中一部分)下载* .gz存档。
with requests.session() as s:
s.post(login_to_site_URL, payload)
load = s.get(scene, stream=True)
with open(path_to_file, "wb") as save_command:
for chunk in load.iter_content(chunk_size=1024, decode_unicode=False):
if chunk:
save_command.write(chunk)
save_command.flush()
下载后,文件大小是我点击文件时的两倍,然后点击"另存为"在上面。并且文件已损坏。
该文件的链接是:http://www.zsrcpod.aviales.ru/modistlm/archive/tlm/geo/00000/28325/terra_77835_20140806_060059.geo.hdf.gz
文件需要登录名和密码,因此我添加了我在关注链接后看到的内容的屏幕截图:http://i.stack.imgur.com/DGqtS.jpg
看起来设置了一些选项以将此存档定义为文本。
file.header是:
{'content-length': '58277138',
'content-encoding': 'gzip',
'set-cookie': 'cidaviales=53616c7465645f5fc8f0abdb26f7b0536784ae4e8b302410a288f1f67ccc0afd13ce067d97ba237dc27749d9957f30457f1a1d9763b03637; path=/,
avialestime=1407386483; path=/; expires=Wed,
05-Nov-2014 04:41:23 GMT,
ciddaviales=53616c7465645f5fc8f0abdb26f7b0536784ae4e8b302410a288f1f67ccc0afd13ce067d97ba237dc27749d9957f30457f1a1d9763b03637; domain=aviales.ru; path=/',
'accept-ranges': 'bytes',
'server': 'Apache/1.3.37 (Unix) mod_perl/1.30',
'last-modified': 'Wed, 06 Aug 2014 06:17:14 GMT',
'etag': '"21d4e63-3793d12-53e1c86a"',
'date': 'Thu, 07 Aug 2014 04:41:23 GMT',
'content-type': 'text/plain; charset=windows-1251'}
如何使用python请求库正确下载此文件?
答案 0 :(得分:4)
看起来请求会自动为您解压缩内容。见here
请求会自动解压缩gzip编码的响应,并且会这样做 尽可能将响应内容解码为unicode。您可以 如果需要,可以直接访问原始响应(甚至是套接字) 以及
如果 Accept-Encoding 请求标头包含 gzip ,则这是默认行为。您可以通过打印 s.request.headers 来查看此信息。为了能够获取原始数据,您应该修改此标头 dict以排除 gzip ,但在您的情况下,解压缩的数据看起来像有效的 hdf 文件 - 所以,只需使用此扩展程序保存并使用它!