我正在创建一个python应用程序,我从互联网上下载rss内容列表。我有一份10个网址列表,我需要下载。
我正在使用python提供的urllib2库。我正在使用的代码是:
for url in urls:
rssObject = urllib2.urlopen(url)
data = rssObject.read()
with open(self.SERVER_PATH+"\\feeds\\"+str(feedID)+str(extension), "w") as requiredData:
requiredData.write(str(data))
requiredData.close()
这里下载了第一个网址,但在下载下一个网址时出错:
<urlopen error [Errno 66] unknown>
是否有任何事件可以通知我完成第一个URL的下载?或者还有其他任何方法可以帮助我避免这个问题吗?
提前致谢。
答案 0 :(得分:1)
是否有任何事件可以通知我完成第一个URL的下载?
引发异常是指无法下载URL的通知。
还是有其他方法可以帮助我避免这个问题吗?
是的,你可以捕捉异常。
try:
rssObject = urllib2.urlopen(url)
data = rssObject.read()
except URLError:
# do stuff which handles the error
我不完全确定这是你需要捕获的错误,但希望你有能力确定要捕获的内容(如果它不是URLError)。
答案 1 :(得分:0)
作为John Mee回答的后续行动,在阅读完您的评论后,您可以尝试以下内容:
def complete_urlopen(url):
complete = False
while not complete:
try:
obj = urllib2.urlopen(url)
complete = True
except URLError, e:
pass
return obj.read()
然后通过替换:
来使用它rssObject = urllib2.urlopen(url)
data = rssObject.read()
使用:
data = complete_urlopen(url)
请注意,此代码假定urlopen()
最终会成功。如果它永远不会,您的进程将永远挂在while
循环中。更复杂的版本可以考虑最大迭代次数,这样当它们到达时,进程就会退出。