如何使用Spidermon监视特定的蜘蛛?

时间:2019-07-08 09:43:13

标签: python scrapy spidermon

我正在跟踪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
    ]

1 个答案:

答案 0 :(得分:4)

有不同的方法可以实现这一目标。

  1. 每个监视器测试方法都有一个data.spider属性(https://spidermon.readthedocs.io/en/latest/monitors.html#id1),其中包含您正在运行的Spider的实例。您可以在监视器中包含if语句,以验证其名称并根据监视器执行所需操作:
@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
  1. 您可以使用自定义设置(https://docs.scrapy.org/en/latest/topics/settings.html#settings-per-spider)为不同的Spider启用不同的监视器。
# 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有意义的监视器。

  1. 特别是对于验证最少项目数量的监视器,我们有一个内置监视器(https://spidermon.readthedocs.io/en/latest/monitors.html#spidermon.contrib.scrapy.monitors.ItemCountMonitor)供您使用。因此,您可以使用前面提到的SPIDERMON_MIN_ITEMS为每个蜘蛛设置不同的custom_setting设置。