gpt4 book ai didi

python - 如何使用 Spidermon 监控特定的蜘蛛?

转载 作者:行者123 更新时间:2023-11-28 22:10:16 25 4
gpt4 key购买 nike

我正在关注 Spidermon 关于监控 Spiders 的文档,在他们的示例中,他们创建的监视器似乎运行在他们所有的 Spiders 上,我无法弄清楚如何在单个 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. 每个监视器测试方法都有一个 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 设置。

关于python - 如何使用 Spidermon 监控特定的蜘蛛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56932218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com