Как контролировать конкретных пауков с помощью Spidermon? - PullRequest
2 голосов
/ 08 июля 2019

Я следую документации Spidermon по мониторингу Spiders, в их примерах мониторы, которые они создают, похоже, работают на всех своих Spiders, я не могу понять, как запустить монитор на одном 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 Ответ

4 голосов
/ 09 июля 2019

Есть разные способы добиться этого.

  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
Вы можете включить разные мониторы для разных пауков, используя пользовательские настройки (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 вы включаете только те мониторы, которые имеют смысл для каждого паука.

Специально для монитора, который проверяет минимальное количество элементов, у нас есть встроенный монитор (https://spidermon.readthedocs.io/en/latest/monitors.html#spidermon.contrib.scrapy.monitors.ItemCountMonitor), который вы можете использовать. Таким образом, вы можете установить различные настройки SPIDERMON_MIN_ITEMS для каждого паука, используя custom_setting упомянуто ранее.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...