关于爬虫监控网页的一个困惑

2016-07-22 00:02:20 +08:00
 SlipStupig
目前我用 md5 值去监控网页是否更新,但是这个涉及一个问题,就是每次都需要下载完成网页,目前我 DB 有 200 万 URL 按这个方法去更新网页,每次都要重新抓取这 200 万网页实在太慢了(而且还有目前还有增量),有什么好的办法可以更好的监控网页是否改变吗?
9838 次点击
所在节点    Python
36 条回复
shiny
2016-07-22 00:12:33 +08:00
有的内容有 etag 和 last-modified 可以使用;
并发抓取;
云服务器弹性分配资源来抓取

爬虫本来就是费服务器的东西,可以考虑按网站权重分配爬虫资源。
shiny
2016-07-22 00:13:27 +08:00
用 md5 摘要可能不是很好的办法,因为略微细小的变动就会认为是全新的页面(如果你需要的是正文的话)
SlipStupig
2016-07-22 00:23:53 +08:00
@shiny last-modified 这个不是特别可靠,我主要还是抓取电商这类,他们都有 cdn , cdn 每天会全站更新 last-modified 这个字段,没有什么用,权重这块我考虑过了,但是没想好怎么弄
liangmishi
2016-07-22 00:31:43 +08:00
赞成按网站权重分配爬虫资源,经常检测到更新的网站就多去几次。
shiny
2016-07-22 02:26:12 +08:00
@SlipStupig 此外,部分网站会定时更新,可以用算法检测,能够节约带宽。
Actrace
2016-07-22 05:37:54 +08:00
2 亿级路过。。。你要做的这个其实已经相当深入了。
额外增加一个更新频率的字段用来生成爬取队列,不常更新的在多次爬取后延后处理就行了,整个系统的资源使用率会下来一部分(虽然一开始还是需要一定的资源)。
wannianma
2016-07-22 07:42:40 +08:00
记录更新时间,更新频率越低,相应的降低爬取频率!
SCaffrey
2016-07-22 07:47:12 +08:00
@wannianma 如何判断是否更新了呢……?
wannianma
2016-07-22 07:54:42 +08:00
@SCaffrey 记录上次更新时间。如何判断是否更新,因网页而异。大体思路就是,如果当前网页上次更新时间距离很久,爬取权重较低,当然不是不爬,爬取后未更新,最后更新时间距离距当前时间更久,爬取权重更低,根据爬取权重决定爬取频率。思路是这样,细节还要思考
SlipStupig
2016-07-22 08:16:21 +08:00
@shiny 算法能提个方向么?
cyang
2016-07-22 08:45:16 +08:00
恐怕很难,即便 Http 头里有缓存标记 那么也至少要 Get 一次吧?你不想下载网页就想知道网页是否更新不觉得矛盾?除非被爬取站给个 API ?
ytmsdy
2016-07-22 09:37:57 +08:00
只能设置重新抓取的频率了,无论什么监控算法,前提就是要把网站的信息爬下来对比才知道。
SlipStupig
2016-07-22 09:56:12 +08:00
@cyang 头部还好, GET 请求一下就返回一个头部就完事了,内容就大了少的 2kb ,大的几十 kb ,缓存标记基本上没什么作用
knightdf
2016-07-22 10:03:25 +08:00
只能自己记个更新时间然后按频率更新
tabris17
2016-07-22 10:09:19 +08:00
把网页根据更新频率标注等级
mafic
2016-07-22 11:04:05 +08:00
@Actrace 更新频率的话是人为更新 不知道咋处理,看到有定时处理的 百万级数据不知道靠谱不
Comdex
2016-07-22 12:31:25 +08:00
@wannianma
@SlipStupig 如何低成本地判断网页有了不小的更新?一般只关注网页的正文核心内容,假设网页中带有广告文字实时更新的话这样的更新无意义。。。
SlipStupig
2016-07-22 15:35:46 +08:00
@Comdex 去猜测正文内容变化?
Comdex
2016-07-22 15:47:41 +08:00
@SlipStupig 提取正文再判断成本很高啊,现在提取正文正确率也还不行啊,所以关注点是网页有多少内容变化了的,这个不知咋解决
SlipStupig
2016-07-22 15:54:27 +08:00
@Comdex 正文预测这块我做过,准确率还不错,反而是更新多少这个概念比较虚

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

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

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

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

© 2021 V2EX