2010-05-05 173 views
11

我试图使用Python检索500mb文件,并且我有一个使用urllib.urlretrieve()的脚本。我和下载站点之间似乎存在一些网络问题,因为此调用一直挂起而无法完成。但是,使用wget来检索文件往往没有问题。 urlretrieve()wget之间有什么区别可能会导致这种差异?Python之间的区别urllib.urlretrieve()和wget

回答

16

答案很简单。 Python的urlliburllib2远不如它们可能的成熟和健壮。根据我的经验,甚至比wget更好的是cURL。我已经编写了通过HTTP下载千兆字节文件的代码,文件大小从50 KB到2 GB以上不等。据我所知,cURL现在在这个星球上最可靠的软件是。我不认为python,wget甚至大多数web浏览器都可以在实现的正确性和健壮性方面与之匹配。在一个使用urllib2的现代python中,它可以做得非常可靠,但我仍然运行一个curl子进程,这绝对是稳定的。

陈述这个的另一种方式是cURL只做一件事,它比其他任何软件都做得更好,因为它有更多的开发和改进。 Python的urllib2是可用和方便的,并且对于小到平均的工作负载而言足够好,但cURL在可靠性方面领先于其他用户。

此外,袅袅有许多选项调整可靠性行为,包括重试次数,超时值等

2

如果您正在使用:

page = urllib.retrieve('http://example.com/really_big_file.html') 

要创建一个字符串,500MB可以很好税你的机器,使之缓慢,并导致连接超时的。如果是这样,你应该使用:

(filename, headers) = urllib.retrieve('http://...', 'local_outputfile.html') 

这将不会税翻译。

值得注意的是urllib.retrieve()使用urllib.urlopen() which is now deprecated

+0

好一点,虽然我使用的保存到一个文件中更长的版本。 – jrdioko 2010-05-06 18:36:40