使用python从Internet下载文件

时间:2017-08-18 14:53:11

标签: python python-2.7 urllib2

我试图通过此link从网站检索CSV数据。

手动下载时,你会得到synop.201708.csv.gz,这实际上是一个错误地命名为.gz的csv,它的权重为2233KB

运行此代码时:

import urllib

file_date = '201708'
file_url = "https://donneespubliques.meteofrance.fr/donnees_libres/Txt/Synop/Archive/synop.{}.csv.gz".format(file_date)
output_file_name = "{}.csv.gz".format(file_date)

print "downloading {} to {}".format(file_url, output_file_name)
urllib.urlretrieve (file_url, output_file_name)

我收到了损坏的~361Kb文件

任何想法为什么?

2 个答案:

答案 0 :(得分:1)

似乎正在发生的事情是MétéoFrance网站滥用了Content-Encoding标题。该网站报告它正在为您提供gzip文件(Content-Type: application/x-gzip),并且它正在以gzip格式对其进行编码以进行传输(Content-Encoding: x-gzip)。它还说该页面是一个附件,应该以其正常名称(Content-Disposition: attachment

保存

在真空中,这是有意义的(在某种程度上;压缩已经压缩的文件几乎是无用的):服务器提供gzip文件并再次压缩它以进行传输。收到后,您的浏览器撤消传输压缩并保存原始gzip文件。在这里,它解压缩流,但由于它没有再次压缩,它不能按预期工作。

答案 1 :(得分:0)

正如pvg所说:

urllib.urlretrieve下载的文件是压缩存档而不是csv文件,一切都很好

我认为我得到了一个名为.gz的csv,因为当我通过我的浏览器(chrome)手动下载它时,它在没有告诉我的情况下解压缩它并保留了未经分类的文件名.gz