【发布时间】:2014-09-29 22:48:03
【问题描述】:
如何在 scrapy 中实现自定义信号?我的项目实施了评分系统。根据项目的分数,它要么被接受,要么被拒绝。我希望能够向 ITEM_ACCEPTED 和 ITEM_REJECTED 发出信号以收集有关抓取的统计信息。
我正在查看源代码,https://github.com/scrapy/scrapy/blob/master/scrapy/signals.py - 但我不清楚这里发生了什么。
任何有关如何发送此信号的说明也会有所帮助。
感谢任何建议!
编辑: 我在scrapy docs上找到了这个:
http://doc.scrapy.org/en/latest/topics/api.html#module-scrapy.signalmanager
我的一只蜘蛛:
from Scrapers.extensions import signals #my custom signals
def parse(self, response):
manager = SignalManager(self)
manager.send_catch_log(signals.ITEM_ACCEPTED)
manager.send_catch_log(signals.ITEM_REJECTED)
我的扩展:
from Scrapers.extensions import signals as custom
@classmethod
def from_crawler(cls, crawler):
o = cls(crawler.stats)
crawler.signals.connect(o.spider_closed, signal=signals.spider_closed)
crawler.signals.connect(o.spider_error, signal=signals.spider_error)
crawler.signals.connect(o.item_scraped, signal=signals.item_scraped)
crawler.signals.connect(o.item_accepted, signal=custom.ITEM_ACCEPTED)
crawler.signals.connect(o.item_rejected, signal=custom.ITEM_REJECTED)
return o
def item_accepted(self):
print "it worked -- accepted"
def item_rejected(self):
print "it worked -- rejected"
信号
ITEM_ACCEPTED = object()
ITEM_REJECTED = object()
【问题讨论】:
-
@rockheartsm4l 你能解决这个问题吗?
标签: python python-2.7 signals scrapy