【问题标题】:How to monitor specific spiders with Spidermon?如何用 Spidermon 监控特定的蜘蛛?
【发布时间】:2019-07-08 09:43:13
【问题描述】:

我正在关注 Spidermon 的关于监控蜘蛛的文档,在他们的示例中,他们创建的监控器似乎运行在所有蜘蛛上,我不知道如何在单个蜘蛛上运行监控器。

我尝试将我的 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
    ]

【问题讨论】:

    标签: python scrapy spidermon


    【解决方案1】:

    有不同的方法来实现这一点。

    1. 每个监视器测试方法都有一个 data.spider 属性 (https://spidermon.readthedocs.io/en/latest/monitors.html#id1),其中包含您正在运行的蜘蛛实例。您可以在监视器中包含一个 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) 为不同的蜘蛛启用不同的监视器。
    # 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) 可供您使用。因此,您可以使用前面提到的custom_setting 为每个蜘蛛设置不同的SPIDERMON_MIN_ITEMS 设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-18
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2011-02-20
      • 1970-01-01
      相关资源
      最近更新 更多