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

2016-07-22 00:02:20 +08:00
 SlipStupig
目前我用 md5 值去监控网页是否更新,但是这个涉及一个问题,就是每次都需要下载完成网页,目前我 DB 有 200 万 URL 按这个方法去更新网页,每次都要重新抓取这 200 万网页实在太慢了(而且还有目前还有增量),有什么好的办法可以更好的监控网页是否改变吗?
10075 次点击
所在节点    Python
36 条回复
JoeShu
2016-07-22 16:24:15 +08:00
提供一个思路,可以用 HEAD 方法请求网页的头部信息,可以判断 content-length 大小的变化。从直觉上看,网页内容变化了, content-length 大概率会变化。
SlipStupig
2016-07-22 16:31:48 +08:00
@JoeShu 这个准确性不行吧
yutian2211
2016-07-22 16:44:54 +08:00
@JoeShu HEAD 方法出的结果 可作为一个参考值,如果无变化,延后抓取
SlipStupig
2016-07-23 20:54:29 +08:00
@yutian2211 出什么结果作为参考?
FindHao
2016-07-24 08:11:47 +08:00
他们的网页有 site map 吗,比如类似我这个。。
http://www.findspace.name/post.xml
mafic
2016-07-24 14:04:20 +08:00
楼主怎么解决 跪求解决方案。现在同样遇到此问题
ezreal
2016-07-24 20:23:41 +08:00
咦,我也在做这东西。
lancemoon
2016-07-24 23:21:15 +08:00
转成图片,进行相似计算呢
或者文字的也是同样的道理
SlipStupig
2016-07-25 00:25:38 +08:00
@lancemoon 网页转成图片我不知道有什么意义,文字的话还不是得下载完成所有的内容,进行相似度计算比 hash 计算更慢啊!
SlipStupig
2016-07-25 00:26:38 +08:00
@mafic 目前考虑设计一个权重算法用然后用 hash 一致性去调度多个 worker
SlipStupig
2016-07-25 00:29:50 +08:00
@FindHao 没有啊!
lizon
2016-07-25 10:54:53 +08:00
我给你分析一下这个问题:
首先网页是否修改,你有两种方式获知,一种是网页的在修改的时候主动发出一个通知告诉你,另一种是查询网页和历史纪录比较,得知是否修改。如果你是网页的拥有者,那么在网页修改的时候加一个触发机制通知你就行;如果你不是,那么就只有老老实实轮询。
如果你的需求是必须监控每一张网页的修改,那么就需要不断改善你的爬取性能,除了挨个爬取之外别无他法。
如果并不需要,那么你可以选择性轮询,对于修改频繁的网页,你查询频率调高一些,对于修改不频繁的网页,查询频率调低一些。可以写一个函数,用于评估网页修改是否频繁,然后以此分配爬取频率,争取最大化利用你有限的爬取资源。
对于网页是否修改,这个是你自己定义,哪种程度的内容改变算“修改”,需要你自己判断
yutian2211
2016-07-26 15:49:50 +08:00
@SlipStupig content-length 如果变化了,正常抓取,如果没有变化,延后抓取,当然再辅助于权重设计
SlipStupig
2016-07-26 19:34:09 +08:00
@yutian2211 我整理一下
Wongzigii
2017-05-26 10:53:35 +08:00
@SlipStupig 求分享
flynaj
2018-09-20 21:48:08 +08:00
curl -I 参数,头没有变化基本内容不会变

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

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

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

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

© 2021 V2EX