网页发生变化,对搜索引擎来说的确是件头疼的事,最简单直接的办法就是让爬虫重新下载一遍,然后比较网页指纹来确定网页变化,但当网页规模很大时(下载一遍很耗时),以及网页搜索新鲜性要求较高时,这笨法就歇菜了。
但是仍有一些途径可以优化和改进:
(1) 为减少浏览器对web服务器流量过大,http 1.1 设计了 if-modified-since 和 E-tag 功能,你可以在每一次下载后,记住last-modified-time 和 E-tag内容,然后下一次抓取时,在http协议上带上这些值,如果内容没变化,web服务器直接返回304页面未变化错误码,从而快速得出网页未变化结论;此法判断不出,在跳入指纹比较。
(2) 从效率上考虑,我们不能对所有网页一视同仁,而应该重点检查;测试发现,大部分网站的网页变化应该有一定规律的,比如首页和论坛列表页等容易发生变化,但老新闻内容页可能几年都不会发生变化;只要把经常变的给揪出来,变化内容就顺便发现了,那么怎么跟踪这些变化呢?可以记录每个url的阶段性变化历史(如访问了几次,变化了几次),然后下次抓取时,对其进行预测,优先级排序,经常变化的经常访问。
补充说明:
(1) if-modified-since / E-tag 不是所有的web服务器都支持,但一旦支持效果就非常好;
(2) 网页变化预测算法需要保证几点:
a) 调度上,既要满足经常变的经常抓,还要保证不经常变的有机会抓;
b) 网页预测重要性上,可以考虑:url的深度(越小越重点)、索引页的嫌疑度(链接较多,有新内容时列表页最容易变)、历史变化情况 等参数;
c) 历史预测信息需要根据时间进行调整,好应对各种场景,比如时段性频繁变化网页(过年时回家主题页面,奥运时奥运板块页面等)
总结:能提高效率的尽量提高,网页变化预测算法公式设计的足够好,随着时间推移,你的搜索引擎对目标网站的变化信息识别会越来越准,发现变化的时间也会越来越短。
上述网页预测借鉴了北大天网搜索引擎的网页变化预测理论;
实时搜索原理暂不清楚,请了解的补充思路。
但是仍有一些途径可以优化和改进:
(1) 为减少浏览器对web服务器流量过大,http 1.1 设计了 if-modified-since 和 E-tag 功能,你可以在每一次下载后,记住last-modified-time 和 E-tag内容,然后下一次抓取时,在http协议上带上这些值,如果内容没变化,web服务器直接返回304页面未变化错误码,从而快速得出网页未变化结论;此法判断不出,在跳入指纹比较。
(2) 从效率上考虑,我们不能对所有网页一视同仁,而应该重点检查;测试发现,大部分网站的网页变化应该有一定规律的,比如首页和论坛列表页等容易发生变化,但老新闻内容页可能几年都不会发生变化;只要把经常变的给揪出来,变化内容就顺便发现了,那么怎么跟踪这些变化呢?可以记录每个url的阶段性变化历史(如访问了几次,变化了几次),然后下次抓取时,对其进行预测,优先级排序,经常变化的经常访问。
补充说明:
(1) if-modified-since / E-tag 不是所有的web服务器都支持,但一旦支持效果就非常好;
(2) 网页变化预测算法需要保证几点:
a) 调度上,既要满足经常变的经常抓,还要保证不经常变的有机会抓;
b) 网页预测重要性上,可以考虑:url的深度(越小越重点)、索引页的嫌疑度(链接较多,有新内容时列表页最容易变)、历史变化情况 等参数;
c) 历史预测信息需要根据时间进行调整,好应对各种场景,比如时段性频繁变化网页(过年时回家主题页面,奥运时奥运板块页面等)
总结:能提高效率的尽量提高,网页变化预测算法公式设计的足够好,随着时间推移,你的搜索引擎对目标网站的变化信息识别会越来越准,发现变化的时间也会越来越短。
上述网页预测借鉴了北大天网搜索引擎的网页变化预测理论;
实时搜索原理暂不清楚,请了解的补充思路。