我正试图从同一服务器下载超过30万个HTML文件。我在列表/文本文件中有URL。我的第一次尝试是使用python-urllib/requests,但速度非常慢,在几个链接(10-20(后就会被卡住。代码示例:
for i, url in enumerate(url_list):
urllib.request.urlretrieve(url, "./pages/"+str(i))
然后我试着简单地使用这样的wget:
wget -i links_file.txt -U netscape
wget工作得很好,它下载1-5k的文件没有问题,而且看起来很快,但后来被随机(?(文件卡住了:
Connecting to <website>... connected. HTTP request sent, awaiting response...
现在我可以看到它在哪个URL上被卡住了,只需停止运行,然后从同一点重新开始,它就可以再次完美地进行1-5k的下载。由于我不能在每次它被卡住时手动执行此操作,直到我最终拥有所有300k个文件,所以我想知道如果wget等待响应的时间太长,然后再尝试,是否有办法自动停止它?或者还有其他更好的方法可以自动下载这么多HTML文件吗?
如果wget等待响应的时间过长,我如何自动停止它然后再试一次?
您要查找的内容称为超时和重试次数。在wget
中,您可以使用--timeout
一次设置所有超时,或者使用的特定超时
--dns-timeout
--connect-timeout
--read-timeout
在任何一种情况下,您都应该提供=
之后的秒数值,例如--timeout=60
使用--tries
设置重试次数(默认值:20(,例如--tries=10
,但请记住,如果出现致命错误,则不会进行重试。
您还可以找到有用的--no-clobber
,其效果是,如果已经存在这样的命名文件(将被覆盖(,则文件不会被下载