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

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

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

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

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

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

© 2021 V2EX