12

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

4

2 回答 2

17

答案很简单。Python远没有它们可能的成熟和健壮urlliburllib2根据我的经验,甚至比 wget 更好的是cURL. 我编写了通过 HTTP 下载千兆字节文件的代码,文件大小从 50 KB 到超过 2 GB 不等。据我所知,cURL 是目前地球上完成这项任务最可靠的软件。我认为 python、wget 甚至大多数 Web 浏览器在实现的正确性和稳健性方面都无法与之匹敌。在以完全正确的方式使用 urllib2 的足够现代的 python 上,它可以变得非常可靠,但我仍然运行 curl 子进程,这绝对是坚如磐石。

另一种说法是 cURL 只做一件事,它比任何其他软件都做得更好,因为它有更多的开发和改进。Pythonurllib2可维护且方便,并且对于小型到一般的工作负载来说足够好,但 cURL 在可靠性方面遥遥领先。

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

于 2010-05-12T02:26:25.943 回答
2

如果您正在使用:

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

您正在创建一个 500mb 的字符串,这可能会对您的机器造成负担,使其变慢,并导致连接超时。如果是这样,您应该使用:

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

这不会对口译员征税。

值得注意的是 urllib.retrieve() 使用urllib.urlopen() 现在已弃用

于 2010-05-06T00:21:11.007 回答