January 12, 2006
RSS网络爬虫的时间规则::[Search Engine]

RSS的网络爬虫的时间规则的设置:
设定RSS爬虫重新访问的5个级别:
Level[1]=20 Minutes
Level[2]=200 Minutes
Level[3]=1000 Minutes
Level[4]=2000 Minutes
Level[5]=10000 Minutes
设定RSS 源的权重为从0到5
RssRank=0 ~ 5
要点:
1.每一个RSS 源对应一个时间T[i],这个时间取整就得到 Level 。例如,这个时间是250分钟,那么就取Level[2],就是每隔200分钟抓取一次。
2.每一次这个对应时间都是改变的,根据这个RSS源有没有变化。
3.当更新了,这个时间就除以1.2 ,当未更新,这个时间就乘以1.2。
4.RssRank起到调整更新时间级别的规则。例如当一个RSS在Level[5],但是它的RssRank是3,那么更新时间调整为Level[5-3] = Level[2] = 200分钟。
总体公式:
T[i+1] = T[i] [*(1.2)/(1.2)]
T = Level[ AntiLevel[T[i][(1.2)|/(1.2)]] - RssRank]
经过长时间的运行,T序列都变动非常稳定。
另外,替朋友招聘〔垂直搜索〕开发人员。有兴趣请发简历给我。luliang#bokee.com ,另外今天晚上的搜索引擎沙龙讨论的主题是垂直搜索。
Posted at January 12, 2006 12:43 AM by Liang at 12:43 AM | Comments (8) | TrackBack(0) | Booso!| Niu.la收藏!Trackback
You can ping this entry by using http://www.wespoke.com/cgi-bin/mt/mt-tb.cgi/841
Comments
是否可以在Level里按rss的变化频率再从大到小排下序呢,我是这么想的,如果如果一个rss有固定10个条目,更新频率为1min更新一个,这样如果每20分钟给它做一次的话,就会丢失10条数据.当然解决这个最好办法就是一旦发现更新便进行解析,但这又是不可能的. 所以更新速率超快的rss怎么办,20min对他来讲也是很慢的啦.
另外,可能还会存在一种情况,就是如果一个更新频率超快的rss放在Level[1]的很靠后的位置,那么还没有等到做到它,它就已经更新了,这样就又丢失了数据.但可以通过这种方法来解决,就是把变化率高的放在前面先处理,低的后处理,设
F = A/t F:增量的产生频率, A:增量部分 t:时间
则 sort(Level[n].begin(), Level[n].end(), SortBy F);
呵呵,好复杂。不过,一个好的算法是有必要的。
我以前在测试期,每半小时访问一次Slashdot,结果被它给BAN了。
我是根据前20次更新取回的Item合计作为权值来决定下一次更新时间的,再加上Etag的判断,也还凑合。
