我有我通过wget来下载网址大文本文件。 我已经写了一个小python脚本基本上通过每个域名循环和使用wget(使用os.system(“wget的” + URL))下载。 但问题是,wget的只是挂在连接上如果远程服务器不连接后回复。 如何设置在这样的情况下,有时间限制? 我想一段时间后终止了wget如果远程服务器没有连接后回复。
问候,
我有我通过wget来下载网址大文本文件。 我已经写了一个小python脚本基本上通过每个域名循环和使用wget(使用os.system(“wget的” + URL))下载。 但问题是,wget的只是挂在连接上如果远程服务器不连接后回复。 如何设置在这样的情况下,有时间限制? 我想一段时间后终止了wget如果远程服务器没有连接后回复。
问候,
这似乎是少了约蟒蛇的问题,更多的是关于如何使用wget问题。 在GNU wget的,你可能在使用,重试默认数量为20.你可以使用-t设置trieds,也许wget的,如果该文件无法下载-T0会很快跳过它。 或者,你可以使用-S标志来获得断绝响应,并有蟒蛇作出适当的反应。 但是,最有用的选项,你会-T或超时设置,为-T10有它在十秒钟后超时并继续前进。
如果你正在做的是通过迭代列表并下载网址我只想用wget的,没有必要在这里蟒的名单。 事实上,你可以在一行做
awk '{print "wget -t2 -T5 --append-output=wget.log \"" $0 "\""}' listOfUrls | bash
这是什么做的是通过URL列表运行,并调用了wget,其中wget的尝试下载文件两次,并终止连接前,等待5秒,这也追加到wget.log响应,您可以grep
在最终找一个404错误。
使用--timeout seconds
参数限制时间的请求。 您可以更具体和使用--connect-timeout seconds
如果需要的话。 见wget的手册以获取更多信息。
你不需要使用外部工具如wget
。 使用内置urllib2
下载文件。 该文档可在这里
你不应该调用wget
二进制从Python中做一个任务是这样的。 使用Python的可用HTTP的图书馆之一,而不是,您将得到更好的错误处理和控制。
有urllib2
( 官方的文档 , 失踪手册 ),这是标准库的一部分。
然而,我强烈建议使用优秀的requests
模块来代替。 它有一个非常清晰的API,使得简单的任务简单,因为他们应该的,但仍然提供了一吨的灵活性和细粒度控制。
使用requests
模块,你可以指定超时使用(秒) timeout
像这样的关键字参数:
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.