首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Spidermon进行Scrapy历史输出比较

如何使用Spidermon进行Scrapy历史输出比较
EN

Stack Overflow用户
提问于 2019-03-18 12:25:48
回答 2查看 257关注 0票数 1

因此,Scrapinghub正在为Scrapy质量保险发布一项新功能。该公司表示,它具有历史比较功能,可以检测当前刮擦数量是否仅低于前一次刮擦数量的50%,这是可疑的。但是,我如何应用它呢?

EN

回答 2

Stack Overflow用户

发布于 2019-03-21 11:52:55

要将当前抓取的项目与上一次运行进行比较,您首先需要将上一次运行的统计数据存储在某个地方。

以Github上的Spidermon example project为例,特别是monitors.py文件。它定义了两个监视器,ItemCountMonitorItemValidationMonitor,前者检查爬行器是否报废了少于1000个项目,如果是,它将send a message on Slack。后者检查是否正确地验证了项模式,如果没有,它还会在Slack上发送一条消息。

现在来回答你的问题。

如果你想检测当前抓取的项目是否比之前的抓取少了50%,你应该将scape统计数据存储在某个地方,甚至存储抓取的项目,假设你将抓取的项目存储在目录/home/user/scraped_items/%(date)s.json中,其中%( date )s是爬行器运行的日期(例如: 2019-01-01)。为了简单起见,假设您每天运行爬行器,并且每天有一个文件。

然后,您可以像这样编写一个监视器:

代码语言:javascript
运行
AI代码解释
复制
import json
from datetime import datetime, timedelta

@monitors.name("Item count dropped")
class ItemCountDroppedMonitor(Monitor):
    @monitors.name("Item count dropped since previous run")
    def test_item_count_dropped(self):
        yesterday = (datetime.now() - timedelta(days=1)).strftime('%Y-%m-%d')
        last_day_item_path = f'/home/user/scraped_items/{yesterday}.json'
        minimum_threshold = 0.5  # 50%
        items_extracted_now = getattr(self.data.stats, "item_scraped_count", 0)
        items_extracted_last_run = json.loads(open(last_day_item_path).read())
        items_extracted_last_run = len(items_extracted_last_run)
        diff = items_extracted_last_run - items_extracted_now
        self.assertFalse(
            diff >= (items_extracted_last_run * minimum_threshold),
            msg="Extracted less items than expected"
        )
票数 1
EN

Stack Overflow用户

发布于 2019-07-09 11:41:47

Spidermon version1.10引入了一个新的统计信息收集器,它将上次作业执行(https://spidermon.readthedocs.io/en/latest/stats-collection.html)的统计信息保存在您的.scrapy目录中。因此,每次执行爬行器时,都会在爬行器实例中提供一个stats_history属性,其中包含以前执行的所有作业的所有统计信息的列表。您不再需要像Luiz在他的回答中建议的那样手动处理统计数据的存储(但原则基本上是相同的)。

有了这些信息,您可以创建自己的监视器来处理这些统计数据,并计算抓取的项目的平均值,并将它们与您最近的执行进行比较(或者您可以根据需要使用统计数据)。您可以在前面提到的文档中看到类似的监视器示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55221375

复制
相关文章

相似问题

领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档