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

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

问题描述:

urllib2feedparser库在Python中,我发现了以下错误的大部分时间,只要尝试连接,并获取从特定的URL的内容开始:Feedparser(和urllib2的)问题:连接超时

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源。

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

任何建议将不胜感激。

超时发生的频率如何?如果不频繁,则可以在每次超时后等待,然后重试请求:

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 
+0

有时我可以检索10个连续的请求,直到出现错误,有时甚至不是单个请求。 – Andrej

作为误差表示,它是一个连接问题。这可能是您的网络连接或与服务器/连接/带宽的问题..

一个简单的解决方法是做一个while循环您feedparsing,当然保持的最大重试计数器..