我正在跟踪Spidermon的有关监控Spider的文档,在他们的示例中,他们创建的监视器似乎可以在所有Spider上运行,我不知道如何在单个Spider上运行监视器。
我尝试过将Spider传递到test_min_items中,但是我不知道在哪里设置。
from spidermon import Monitor, MonitorSuite, monitors
@monitors.name('Item count')
class ItemCountMonitor(Monitor):
@monitors.name('Minimum number of items')
def test_min_items(self):
item_extracted = getattr(
self.data.stats, 'item_scraped_count', 0)
minimum_threshold = 10
msg = 'Extracted less than {} items'.format(
minimum_threshold)
self.assertTrue(
item_extracted > minimum_threshold, msg=msg
)
class SpiderCloseMonitorSuite(MonitorSuite):
monitors = [
ItemCountMonitor
]
答案 0 :(得分:4)
有不同的方法可以实现这一目标。
@monitors.name('Item count')
class ItemCountMonitor(Monitor):
@monitors.name('Minimum number of items')
def test_min_items(self):
if self.data.spider.name == "somespider":
... # Do something
else:
... # Do other thing
# spider1.py
class MySpider1(scrapy.Spider):
name = 'myspider1'
custom_settings = {
'SPIDERMON_SPIDER_CLOSE_MONITORS': (
'myproject.Spider1MonitorSuite',
)
}
# spider2.py
class MySpider2(scrapy.Spider):
name = 'myspider2'
custom_settings = {
'SPIDERMON_SPIDER_CLOSE_MONITORS': (
'myproject.Spider2MonitorSuite',
)
}
对于每个MonitorSuite,您只包括对wach spider有意义的监视器。
SPIDERMON_MIN_ITEMS
为每个蜘蛛设置不同的custom_setting
设置。