具有超时的feedparser

xra*_*alf 10 python feedparser

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

feedparser.parse("http://...")
Run Code Online (Sandbox Code Playgroud)

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

jfs*_*jfs 13

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

超时可以限制单个套接字操作可以持续多长时间 - feedparser.parse()可以执行许多套接字操作,因此在dns上花费的总时间,建立tcp连接,发送/接收数据可能要长得多.请参阅使用urllib2或任何其他http库读取超时.


Mik*_*maa 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)
Run Code Online (Sandbox Code Playgroud)


app*_*orc 7

根据作者的建议[1],你应该使用requests库来做http请求,并将结果解析到feedparser。

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