2024-04-25 22:33:09 发布
网友
所以Scrapinghub发布了一个新的特性,用于Scrapy质量保险。该公司表示,它有历史比较功能,可以检测到当前的报废数量是否仅低于上一次报废的50%,这是可疑的。但是,我该如何应用它呢?你知道吗
要将当前刮下的项目与上一次运行进行比较,首先需要将上一次运行的统计信息存储在某个位置。你知道吗
以Github上的Spidermon example project为例,特别是^{}文件。 它定义了两个监视器,ItemCountMonitor和ItemValidationMonitor,前者检查spider报废的物品是否少于1000件,如果是,它将send a message on Slack。后者检查项目架构是否正确验证,如果没有,它还将在Slack上发送消息。你知道吗
ItemCountMonitor
ItemValidationMonitor
现在来回答你的问题。你知道吗
如果您想检测当前的scrape提取的项目是否比前一个scrape少50%,那么您应该将scape统计信息存储在某个地方,甚至存储被刮下的项目,假设您将被刮下的项目存储在一个目录/home/user/scraped_items/%(date)s.json,其中%(date)s是爬行器运行的日期(例如:2019-01-01)。 为了简化,假设您每天运行spider,并且每天有一个文件。你知道吗
/home/user/scraped_items/%(date)s.json
然后你可以这样写一个监视器:
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" )
spidermonversion1.10引入了一个新的stats收集器,它在.scrapy目录中保存上一次作业执行的统计信息(https://spidermon.readthedocs.io/en/latest/stats-collection.html)。因此,每次执行spider时,spider实例中都会有一个可用的stats_history属性,其中包含以前执行的作业的所有先前统计信息的列表。你不需要再像路易斯在他的答案中建议的那样手动处理数据的存储(但原理基本上是一样的)。你知道吗
.scrapy
stats_history
有了这些信息,您可以创建自己的监视器来处理这些统计信息,并计算被刮下的项目的平均值,并将它们与您最近的执行进行比较(或者您可以根据需要使用这些统计信息)。您可以在前面提到的文档中看到这样的监视器示例。你知道吗
要将当前刮下的项目与上一次运行进行比较,首先需要将上一次运行的统计信息存储在某个位置。你知道吗
以Github上的Spidermon example project为例,特别是^{} 文件。
它定义了两个监视器,
ItemCountMonitor
和ItemValidationMonitor
,前者检查spider报废的物品是否少于1000件,如果是,它将send a message on Slack。后者检查项目架构是否正确验证,如果没有,它还将在Slack上发送消息。你知道吗现在来回答你的问题。你知道吗
如果您想检测当前的scrape提取的项目是否比前一个scrape少50%,那么您应该将scape统计信息存储在某个地方,甚至存储被刮下的项目,假设您将被刮下的项目存储在一个目录
/home/user/scraped_items/%(date)s.json
,其中%(date)s是爬行器运行的日期(例如:2019-01-01)。 为了简化,假设您每天运行spider,并且每天有一个文件。你知道吗然后你可以这样写一个监视器:
spidermonversion1.10引入了一个新的stats收集器,它在
.scrapy
目录中保存上一次作业执行的统计信息(https://spidermon.readthedocs.io/en/latest/stats-collection.html)。因此,每次执行spider时,spider实例中都会有一个可用的stats_history
属性,其中包含以前执行的作业的所有先前统计信息的列表。你不需要再像路易斯在他的答案中建议的那样手动处理数据的存储(但原理基本上是一样的)。你知道吗有了这些信息,您可以创建自己的监视器来处理这些统计信息,并计算被刮下的项目的平均值,并将它们与您最近的执行进行比较(或者您可以根据需要使用这些统计信息)。您可以在前面提到的文档中看到这样的监视器示例。你知道吗
相关问题 更多 >
编程相关推荐