Feedparser(和urllib2)问题:连接超时

时间:2011-11-23 08:27:48

标签: python rss urllib2 urllib feedparser

从Python中的urllib2feedparser库开始,每当尝试连接并从特定网址获取内容时,大多数情况下都会出现以下错误:

urllib2.URLError: <urlopen error [Errno 110] Connection timed out>

最小可重复的示例(基本的,使用feedparser.parser直接和高级,我首先使用urllib2库来获取XML内容)粘贴在下面。

# test-1
import feedparser
f = feedparser.parse('http://www.zurnal24.si/index.php?ctl=show_rss')
title = f['channel']['title']
print title

# test-2
import urllib2
import feedparser
url = 'http://www.zurnal24.si/index.php?ctl=show_rss'
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]
request = opener.open(url)
response = request.read()
feed = feedparser.parse(response)
title = feed['channel']['title']
print title

当我尝试使用不同的URL地址(例如http://www.delo.si/rss/)时,一切正常。请注意,所有网址都会导致非英语(即斯洛文尼亚语)的RSS Feed。

我从本地和远程计算机(通过ssh)运行我的实验。报告的错误在远程计算机上更频繁地发生,尽管即使在本地主机上也是不可预测的。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:3)

如错误所示,这是一个连接问题。这可能是您的互联网连接或服务器/连接/带宽的问题..

一个简单的解决方法是在while循环中进行feedparsing,当然保留MAX重试的计数器。

答案 1 :(得分:3)

超时多久发生一次?如果它不频繁,您可以在每次超时后等待,然后重试请求:

import urllib2
import feedparser
import time
import sys

url = 'http://www.zurnal24.si/index.php?ctl=show_rss'
opener = urllib2.build_opener()
opener.addheaders = [('User-Agent', 'Mozilla/5.0')]

# Try to connect a few times, waiting longer after each consecutive failure
MAX_ATTEMPTS = 8
for attempt in range(MAX_ATTEMPTS):
    try:
        request = opener.open(url)
        break
    except urllib2.URLError, e:
        sleep_secs = attempt ** 2
        print >> sys.stderr, 'ERROR: %s.\nRetrying in %s seconds...' % (e, sleep_secs)            
        time.sleep(sleep_secs)

response = request.read()
feed = feedparser.parse(response)
title = feed['channel']['title']
print title