有什么好的办法可以监控"网页结构"变化

2020-09-02 09:57:21 +08:00
 MrhuangSTR

RT,对于每月定时更新爬虫,需要抽取的数据对应的网页结构发生变化数据就会解析出错;例如要抽取的文本一开始 是 //div/span/em/text(), 下次网页结构调整就变成 //div/span/span/text();有什么好的办法可以监控网页结构发生变化或者更健壮的解析方式吗?

3594 次点击
所在节点    Python
26 条回复
crclz
2020-09-02 10:59:22 +08:00
写测试。
爬虫的时候,看看抓取的标题是否为空,是否达到了几个字,是否是汉字……如果不符合测试条件,就通知人工干预(检查+重新写代码)
MrhuangSTR
2020-09-02 11:13:43 +08:00
@crclz 思路可以,但总感觉还可以再优化...如果要抽取的字段很多,那就要对每一个字段进行判断比较
hotpot6147
2020-09-02 11:19:17 +08:00
解析出错时就说明"网页结构"发生了变化, 所以通过捕获异常来监控
crclz
2020-09-02 11:25:38 +08:00
或者用 selenium 获取元素在屏幕上的坐标?与标准坐标差距在某个值以内,就认为未改变。
nnnToTnnn
2020-09-02 11:33:27 +08:00
这不就是 jest 吗? 有成熟的 jest 为什么不用?
zsdroid
2020-09-02 11:39:47 +08:00
解析出错不就是监听到了"网页结构"变化吗?
flowfire
2020-09-02 12:00:15 +08:00
点进来之前我以为你说的是 MutationObserver 。。。。
MrhuangSTR
2020-09-02 14:11:32 +08:00
@hotpot6147
@zsdroid 确实是一种比较取巧的方式,但是都是在爬虫运行过程中才能捕获,感觉不够健壮;能不能在爬虫运行之前先监控到网页结构发生变化,如果未发生变化则运行。
MrhuangSTR
2020-09-02 14:13:56 +08:00
@crclz 解析用 xpath 抽取文本,如果用 selenium 监测坐标点相差可能会更大吧
MrhuangSTR
2020-09-02 14:14:20 +08:00
@flowfire 你不说,我还不知道有 MutationObserver 这个东西.......
hugedata
2020-09-02 14:29:31 +08:00
一般的处理方式不都是配置规则么。。。。爬取之前如果检测到规则出错,就跳过这项任务。然后发给人工重新编辑规则。爬虫是要人工来维护的,基本上做不到全自动。
MrhuangSTR
2020-09-02 14:41:47 +08:00
@hugedata 你的意思是爬之前先按照设置的规则抓取一遍,如果不符合预期就发邮件或者其他方式通知
MrhuangSTR
2020-09-02 14:43:26 +08:00
@nnnToTnnn 搜了下 jest, JavaScript 单元测试?这跟监控网页结构有啥关系
nnnToTnnn
2020-09-02 14:45:52 +08:00
@MrhuangSTR jest 原理就是利用无头浏览器,进行 dom 节点的断言。 如果是自己项目。 一般是用 jest 断言。 如果是做数据抓取,估计就是我想错了。
est
2020-09-02 14:48:29 +08:00
正文抓取?看样子又不一样。2333
hugedata
2020-09-02 14:49:13 +08:00
@MrhuangSTR 对,一般两种方式:1.质量巡检(事后),2.单页面预处理(事前)。具体要结合你的业务来,看看怎么做更适合你们,或者两个结合,或者更多的其他的我没有想到的办法。
jdkl
2020-09-02 14:56:18 +08:00
记得 chrome 有一个插件能够检测网页结构的变化并能发出提醒,但一直没用过,忘记叫什么名字了
MrhuangSTR
2020-09-02 14:59:49 +08:00
@jdkl 叫 Distill Web Monitor 吧,这插件是可以监控网页变化,现在在用,但是只要是网页文本发生变化就会认定是发生变化了吧
MrhuangSTR
2020-09-02 15:01:32 +08:00
@hugedata 你说的这两个词我在爬虫中咋就没有听过....可能我们的业务比较随意
lawler
2020-09-02 19:19:39 +08:00
蹲一个结果。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/703409

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX