我试图通过此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文件
任何想法为什么?
答案 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