python - 避免卡在 conn.getresponse() ( httplib.HTTPConnection )

标签 python http timeout

我用 python 编写了一个爬虫,用于根据一些给定的 url 从网站下载一些网页。我注意到偶尔我的程序会在“conn.getresponse()”这一行挂起。没有异常被抛出,程序只是一直在那里等待。

conn = httplib.HTTPConnection(component.netloc)
conn.request("GET", component.path + "?" + component.query)
resp = conn.getresponse() #hang here

我阅读了 api 文档,它说(添加超时):

conn = httplib.HTTPConnection(component.netloc, timeout=10)

但是,它不允许我“重试”连接。超时后重试抓取的最佳做法是什么?

例如,我正在考虑以下解决方案:

trials = 3
while trials > 0:
    try:
        ... code here ...
    except:
        trials -= 1

我的方向正确吗?

最佳答案

However, it does not allow me to "retry" the connection.

是的,超时旨在将此策略推回到它所属的位置,在您的代码中(并且在 httplib 之外)。

What is the best practice to retry the crawling after a timeout?

它非常依赖于应用程序。你的爬虫可以忍受多长时间来推迟它的其他工作?您有多希望它深入到每个站点?您是否需要能够忍受缓慢、超额订阅的服务器?遇到爬虫有节流或其他对策的服务器怎么办?当我问的时候,你尊重 robots.txt 吗?

由于这些问题的答案可能千差万别,因此您有必要根据爬虫的需求、您倾向于爬网的站点(假设有趋势)以及您的 WAN 性能进行调整。

关于python - 避免卡在 conn.getresponse() ( httplib.HTTPConnection ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8571466/

相关文章:

在 C\C++ 中嵌入 Python 时的 Python 打印输出

python - 平均(似然)编码

error-handling - NSURLConnection没有调用didFailWithError。

javascript - 为什么ajax调用的超时不能正常工作

python - 框架和库是编码中更重要的部分吗?

python - 按索引汇总 2darray

http - 使用 http4s 从 http 更改为 https

javascript - 将包含外部js的div追加到js中的另一个div无法正确执行

javascript - 使用 AJAX 和跨站点脚本读取 header

mysql - PHP脚本超时问题