我有一个Scrapy项目,分析周围的30+上市网站,我试图找到一个方法,如何维护和监测的一致性刮刀,如果任何一个网站的底层网络结构被更新。
我已经用了两种方法来尝试实现这个目标:
DropItem。这在某种程度上是有帮助的,但它假设,如果这3/4字段是正常的,那么结构的其余部分也是可以的。对于上下文,我不能使所有其他字段都是必需的,因为它们本质上是可选的(如colour、size等)有几件事,我想做的路线;
size平均出现在当时的30%上,返回90%或1%的作业可能会发出警报。然而,我可以想出许多情况,要么这会触发许多假阳性,要么甚至不会触发一件事情,但仍然会被打破。TL;博士
如何监视HTML页面结构的更改,以避免运行导致数据损坏的Scrapy作业?
还有哪些其他选项可以检测到刮取作业是否已损坏、启发式或其他?DropItem已在任何可能的情况下使用。
发布于 2019-08-12 11:08:34
检查蜘蛛侠
蜘蛛侠是刮除蜘蛛的扩展。该包为数据验证、统计监视和通知消息提供了有用的工具。这样,您可以将监视任务留给Spidermon,只需检查报告/通知。
发布于 2019-08-12 21:02:54
我亲自用普罗米修斯监控我的蜘蛛队。Prometheus是一种监测数字数据的解决方案,它从web服务收集度量。也就是说,您的服务必须在HTTP端点上公开度量,Prometheus将从那里收集它们。
这是不可行的,因为刮除蜘蛛会在一段时间后完成。对我来说,它起了作用,因为我为自己开发了一个调度刮擦蜘蛛的Python项目。然而,其他方法是可能的:
在大多数情况下,我建议使用Push方法,因为它可以与标准的刮伤蜘蛛一起使用,而无需做进一步的工作。
我个人将这两项指标传递给普罗米修斯:
我目前无法用Prometheus监控蜘蛛内部发生的事情,因为我在进程之外运行蜘蛛,但是在现有的Python进程中运行刮取是可能的(使用Push Gateway方法,您将直接从蜘蛛进程发送数据,因此您可以从您的刮伤进程中访问所有数据)。
屏幕截图
这是我的活动监视器的截图。“每天的物品数量”图表中的每一行都是一个蜘蛛,而我当前的触发器是“1以下”。也就是说,如果蜘蛛完全失败了,我会收到一封电子邮件。由于有些蜘蛛可能有数天没有数据,我有另一个触发器“每周的物品数量”。
当然,如果您有更详细的数据,那么更精细的过滤器是可能的。

发布于 2019-08-13 10:50:20
我编写了一个测试框架,用于测试爬虫和实时缓存的数据,称为scrapy-test。该框架的重点是测试、解析和爬行覆盖率。
您可以为字段定义测试:
from scrapytest.tests import Match, Equal, Type, MoreThan, Map, Len, Required
from myspider.items import PostItem
class TestPost(ItemSpec):
# defining item that is being covered
item_cls = PostItem
# defining field tests
title_test = Match('.{5,}')
points_test = Type(int), MoreThan(0)
author_test = Type(str), Match('.{3}')
# every item should have title - 100%
title_cov = 100以及统计数据:
class TestStats(StatsSpec):
# stat pattern: test functions
validate = {
'log_count/ERROR$': LessThan(1),
'item_scraped_count': MoreThan(1),
'finish_reason': Match('finished'),
}因此,使用scrapy-test的一般工作流程是每天/半小时运行测试,以确保蜘蛛的健康。
https://stackoverflow.com/questions/57459905
复制相似问题