Chu*_*ieh 5 python timeout http
我用 python 编写了一个爬虫,根据一些给定的网址从网站下载一些网页。我注意到我的程序有时会挂在“conn.getresponse()”这一行。没有抛出任何异常,程序只是永远在那里等待。
conn = httplib.HTTPConnection(component.netloc)
conn.request("GET", component.path + "?" + component.query)
resp = conn.getresponse() #hang here
Run Code Online (Sandbox Code Playgroud)
我读了 api 文档,它说(添加超时):
conn = httplib.HTTPConnection(component.netloc, timeout=10)
Run Code Online (Sandbox Code Playgroud)
但是,它不允许我“重试”连接。超时后重试爬网的最佳做法是什么?
例如,我正在考虑以下解决方案:
trials = 3
while trials > 0:
try:
... code here ...
except:
trials -= 1
Run Code Online (Sandbox Code Playgroud)
我的方向正确吗?
但是,它不允许我“重试”连接。
是的,超时旨在将此策略推回其所属位置,在您的代码中(以及在 之外httplib)。
超时后重试爬网的最佳做法是什么?
这非常依赖于应用程序。你的爬虫可以忍受推迟其他工作多久?您有多希望它深入到每个网站?您是否需要能够忍受缓慢且超额订阅的服务器?那么遇到爬虫时有节流或者其他对策的服务器呢?当我问的时候,你尊重吗robots.txt?
由于这些问题的答案可能差异很大,因此您可以根据爬网程序的需求、您倾向于爬网的网站(假设有趋势)以及您的 WAN 性能进行调整。
| 归档时间: |
|
| 查看次数: |
3345 次 |
| 最近记录: |