在python中下载rss内容

时间:2015-02-11 04:53:39

标签: python python-2.7 urllib2

我正在创建一个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的下载?或者还有其他任何方法可以帮助我避免这个问题吗?

提前致谢。

2 个答案:

答案 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循环中。更复杂的版本可以考虑最大迭代次数,这样当它们到达时,进程就会退出。