具有超时的feedparser

时间:2012-03-19 15:12:17

标签: python feedparser

我的代码卡在这个函数调用上:

feedparser.parse("http://...")

之前有效。该网址甚至无法在浏览器中打开。 你会如何治愈这种情况?是否有超时可能性?我想继续,好像什么都不会发生(只有打印一些消息或记录这个问题)

3 个答案:

答案 0 :(得分:13)

您可以使用socket.setdefaulttimeout()全局指定超时。

超时可能会限制单个套接字操作可能持续的时间 - feedparser.parse()可能会执行许多套接字操作,因此在dns上花费的总时间,建立tcp连接,发送/接收数据可能会更长。请参阅Read timeout using either urllib2 or any other http library

答案 1 :(得分:13)

将Python requests库用于网络IO,使用feedparser进行解析:

# Do request using requests library and timeout
try:
    resp = requests.get(rss_feed, timeout=20.0)
except requests.ReadTimeout:
    logger.warn("Timeout when reading RSS %s", rss_feed)
    return

# Put it to memory stream object universal feedparser
content = BytesIO(resp.content)

# Parse content
feed = feedparser.parse(content)

答案 2 :(得分:2)

根据作者的建议[1],应使用请求库执行http请求,并将结果解析到feedparser。

[1] https://github.com/kurtmckee/feedparser/pull/80