【发布时间】:2019-08-12 10:57:22
【问题描述】:
我有一个 Scrapy 项目,可以解析大约 30 多个列表站点,并且我正在尝试找出一种方法,如果更新任何站点的底层 Web 结构,如何维护和监控爬虫的一致性。
我已经使用两种方法来尝试实现这一目标:
我有一套规则
DropItem如果一些核心字段不存在(产品标题、价格和其他一些总是存在的)。这在一定程度上有所帮助,但它假设如果那些 3/4 字段都可以,那么结构的其余部分也可以。对于上下文,我不能将所有其他字段都设为必填字段,因为它们本质上是可选的(即colour、size等)我通过在一组本地保存的 HTML 正文上为每个蜘蛛运行刮板来工作。这有利于整体代码质量,但不能解决确定蜘蛛可能因 DOM 更改而损坏的问题。
有几件事情是我想做的;
- 可能计算每次爬网填充字段的平均频率。如果
size的时间平均为30%,则返回90%或1%的作业可能会引发警报。但是我可以想到很多情况,这会触发一些误报,甚至不会触发任何事情并且仍然会被破坏 - 我的另一个想法是有一个以某种方式监控 HTML 结构的服务,它可以在抓取作业之前运行,如果检测到更改则暂停。对我来说,这似乎是最具弹性的选择,但我不知道如何实现这一目标。
TL;DR
如何监控 HTML 页面结构的变化,以避免运行导致数据损坏的 Scrapy 作业?
还有哪些其他选项可以检测抓取作业可能已损坏、启发式或其他方式? DropItem 已尽可能使用。
【问题讨论】:
标签: python web-scraping scrapy web-crawler monitoring