从Python中的urllib2
和feedparser
库开始,每当尝试连接并从特定网址获取内容时,大多数情况下都会出现以下错误:
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
)运行我的实验。报告的错误在远程计算机上更频繁地发生,尽管即使在本地主机上也是不可预测的。
任何建议都将不胜感激。
答案 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