scrapy有内置的信号,比如spider_opened,spider_closed,item_dropped等等。我们可以利用这些信号来做一些初始化的工作和数据收集统计。比如spider_opened信号就方便了我们在爬虫启动的时候,创建到数据库的连接等,item_dropped的信号就方便我们去收集在爬虫工作的期间,收集被丢弃的item的数量等等。这篇文章不是告诉大家如何使用scrapy信号的,而是告诉大家scrapy信号的工作原理,以及如何自定义我们自己的信号。
一.pydispatch模块
scrapy的信号处理使用的是dispatch模块,这个模块非常小,也非常容易看懂,使用方法如下:
from pydispatch import dispatcher
hello = object()
def func():
print('hello, world')
dispatcher.connect(func, signal=hello, sender=dispatcher.Anonymous)
dispatcher.send(signal=hello)
上面几行代码就创建了我们自己的信号hello,并将这个信号绑定到一个接收器上面即func()行数。然后我们利用send()方法