带python时间限制的wget

带python时间限制的wget,python,wget,Python,Wget,我有一个很大的URL文本文件,我必须通过wget下载。我编写了一个小python脚本,它基本上循环遍历每个域名,并使用wget(os.system(“wget”+URL))下载它们。但问题是,如果远程服务器在连接后没有应答,wget只会挂起连接。 在这种情况下,我如何设定时间限制?如果远程服务器在连接后没有应答,我想在一段时间后终止wget 关于,请使用--timeout seconds参数来限制请求的时间。如果需要,您可以更具体地使用--连接超时秒数。有关详细信息,请参阅。您不需要使用外部工具

我有一个很大的URL文本文件,我必须通过wget下载。我编写了一个小python脚本,它基本上循环遍历每个域名,并使用wget(os.system(“wget”+URL))下载它们。但问题是,如果远程服务器在连接后没有应答,wget只会挂起连接。 在这种情况下,我如何设定时间限制?如果远程服务器在连接后没有应答,我想在一段时间后终止wget


关于,请使用
--timeout seconds
参数来限制请求的时间。如果需要,您可以更具体地使用
--连接超时秒数
。有关详细信息,请参阅。

您不需要使用外部工具,如
wget
。使用内置的
urllib2
下载文件。
文档是可用的

这似乎不是关于python的问题,而是关于如何使用wget的问题。 在您可能正在使用的GNUWget中,默认重试次数为20次。您可以使用-t设置tried,如果文件下载失败,wget-t0可能会很快跳过它。或者,您可以使用-S标志获得服务器响应,并让python做出适当的反应。但是,对您最有用的选项是-T或timeout,将其设置为-T10,使其在10秒后超时,然后继续

编辑: 如果您所做的只是遍历一个列表并下载一个URL列表,那么我只需要使用wget,这里不需要python。事实上,你可以在一行中完成

awk '{print "wget -t2 -T5 --append-output=wget.log \"" $0 "\""}' listOfUrls | bash

这是在运行URL列表并调用wget,其中wget尝试下载文件两次,并在终止连接前等待5秒,它还将响应附加到wget.log,您可以
grep
在最后查找404错误。

您不应该调用
wget
二进制文件来从Python执行类似的任务。使用Python可用的HTTP库之一,您将获得更好的错误处理和控制

还有
urlib2
(,),它是标准库的一部分

然而,我强烈建议使用优秀的。它有一个非常干净的API,使简单的任务变得简单,但仍然提供了大量的灵活性和细粒度的控制

使用
请求
模块,您可以(以秒为单位)使用
超时
关键字参数,如下所示:

response = requests.get(url, timeout=0.02)
如果超过超时,将引发一个
timeout
异常,您需要捕获该异常并以任何方式处理它

import requests
from requests.exceptions import Timeout, ConnectionError

TIMEOUT = 0.02

urls = ['http://www.stackoverflow.com',
        'http://www.google.com']

for url in urls:
    try:
        response = requests.get(url, timeout=TIMEOUT)
        print "Got response %s" % response.status_code
        response_body = response.content
    except (ConnectionError, Timeout), e:
        print "Request for %s failed: %s" % (url, e)
        # Handle however you need to ...
样本输出:

Request for http://www.stackoverflow.com failed: Request timed out. Request for http://www.google.com failed: Request timed out. 请求http://www.stackoverflow.com 失败:请求超时。 请求http://www.google.com 失败:请求超时。
这是一个更干净的图书馆。对于这个问题,他们有一个超时
request.get(“http://www.to_url,timeout=0.1)
。执行最简单的任务需要大量的工作(甚至方法重写)。他们在主页上的奇怪声明。我使用
urlib2
执行类似的任务(迭代URL并下载它们),代码非常小。那么,您是否使用
urlib2
进行代理和身份验证?玩得开心。不,但我相信topicstarter也不需要这个,所以我建议使用这个包,因为它是内置的,您不需要安装任何额外的东西。我同意这一点,但真正的问题是python是适合这项工作的工具吗?为什么不直接使用wget呢?不要使用
os.system()
。改用
子流程
模块。如果您所做的只是从文本文件下载,我将只使用wget,在这种情况下不需要python。如果文件
listOfURLS
包含任何尚未进行百分比编码的URL,例如包含空格,则此操作将失败。很好的捕获,但问题不在于投入。预处理最好提前完成。我坚持认为,他最初问题的措辞否定了在这个任务中使用python的必要性。URL编码不是预处理,而是问题的一部分。包含空格的URL是完全有效的URL,您的脚本无法处理它们。(
wget
可以,如果引用正确的话,但是您的shell oneliner不能)。它当然是预处理,但是让我们忽略这个红色的听证会。我编辑了我的一行。假设bashshell,这会正确地引用它,并且应该可以工作。