接触这个包最初是因为爬虫过程中,经常会碰到各种反爬虫,或者是网络连接异常,导致爬虫受阻。这个时候,我一般写一个回调函数,当程序抛出异常的时候,让程序休息几秒钟,重新运行爬虫若干次。
import time
# 爬虫代码,这里没有写中间过程
def spider():
xxx
for i in range(5):
try:
spider()
break
except:
time.sleep(2)
这种方法明显不符合Python的简介风格,我在网上找了一下,果然找到了一个神奇的包——retry,正如它的名字,retry是用来实现重试的。
from retry import retry
@retry(tries=5, delay=2)
# 爬虫代码,这里没有写中间过程
def spider():
xxx
spider()
使用retry实现这个功能,循环次数与delay时间都可以很方便定制,如果你不指定tries与delay,那么相当于加了一个死循环。在括号里还可以添加异常捕获的类型,具体使用方法,可以参考retry的github页面:https://github.com/invl/retry
这种写法明显简介多了,调试起来也变得非常容易。
发表回复