我正在用Python 2.7
编写一个下载网页的脚本。 大多数时候,一切都按计划进行。 鉴于此脚本有数千个网页可供下载,因此不可避免地会出现几次事情无法解决的情况。 脚本在发生URLError
或HTTPError
的情况下放弃并继续前进,但有时一切都会挂起,需要手动点击Ctrl-Z
或Ctrl-C
才能阻止这种情况。 有问题的代码:
f = urlopen (url)
local_file = open (file_name, 'w') # Open local file
local_file.write (f.read())
local_file.close ()
我已经尝试过signal.alarm
,但它并不总是有效。 我尝试了 urlopen 中的超时参数,但这不起作用。
有没有可靠的方法来确保脚本在一定秒数后自动放弃并继续前进? 我应该使用urlopen以外的其他东西吗?
确保您使用的是 urllib2
from urllib2 import urlopen
try:
f = urlopen (url, timeout=10)
except urllib2.URLError:
# try again later
如果你做http请求,我强烈建议使用请求python库。您会发现它更易于使用且功能更强大。可以在这里找到 http://docs.python-requests.org/en/latest/
要安装和使用:
$: pip install requests
编写代码以执行您想要的操作
import requests
try:
response = requests.get(url)
local_file = open(file_name, 'w') # Open local file
local_file.write(response.content)
local_file.close()
except requests.ConnectionError:
pass
希望这有帮助。
干杯
马克