简单搜索引擎模型

简单搜索引擎模型

A Simple Scratch of Search Engine

作者

史春奇,

搜索工程师,

中科院计算所毕业,

[email protected]

1, 需求迫切

2, 搜索引擎简单模型

3, 信息导航模型

4, 商家推广模型

5, 未来

本文是学习搜索引擎的涂鸦草稿, 高深读者请拐弯到:http://sewm.pku.edu.cn/IR-Guide.txt (北大搜索引擎小组--信息检索指南)

第一章 需求迫切

之前说过, 搜索引擎是互联网大爆炸后的新生事物, 他的成功来源于两个方面高度发展, 一个是泛信息化, 一个是泛商品化。

一)泛信息化

分为两个方面, 一方面是信息的类型呈百花齐放, 另一方面是信息的数量呈海量增长。

1, 信息种类繁多。

大家切身感受到的是多媒体娱乐和社交联系在互联网上变得明显的丰富起来。信息种类繁多不可避免会导致搜索引擎的种类繁多起来。 而搜索引擎种类繁多这一点,你可以看一下Google,Baidu提供的服务是多么繁多,你就知道了。参考百度更多(http://www.baidu.com/more/ ), Google更多(http://www.google.com.hk/intl/en/options/ ), 这些还不包括实验室(Lab)的产品。 我们换个角度看这个问题, 看看现在已经有多少种搜索引擎来满足信息繁多的各种需求了, Wiki的搜索引擎列表(http://en.wikipedia.org/wiki/List_of_search_engines )有一个分类,显示了10种类型,分别是,1)论坛, 2)博客, 3)多媒体(音乐,视频,电视),4)源代码,5)P2P资源,6)Email,7)地图,8)价格,9)问答信息,10)自然语言。 我们知道信息爆发都是由需求带动的,那么目前有多少需求已经有搜索引擎在满足了呢? 下面列出了14种类型, 分别是, 1)普通[知识], 2)地理信息,3)会计信息,4)商业信息,5)企业信息,6)手机和移动信息,7)工作信息,8)法律信息,9)医疗信息,10)新闻信息, 11)社交信息,12)不动产信息, 13)电视信息, 14)视频游戏信息。

2,信息海量增长。

类似, 我们从搜索引擎的发展,反向来看信息增长。搜索引擎的索引量是选择收录入库的网页数, 肯定小于或者远小于互联网的信息量。 最早Yahoo是人工编辑的目录索引, 就几万和几十万的级别。 到Infoseek,Google早期等的几百万的索引量。 到Baidu早期的千万、上亿的索引量。 到现在Google等上千亿的索引量。 如果你看一个网页要1秒钟, 1000亿网页要看3171年,而且不吃不喝, 一秒不停地看。如果你是愚公世家,你的祖辈在大禹治水的时候就开始看网页, 到现在你还没看完。

因此草根(Grassroots)用户需要搜索引擎来满足它们的信息的导航,草根用户追求免费,快捷和有效的服务。

二)泛商品化

也分为两个问题, 一方面, 满足新需求的商品种类繁多。 另一方面, 满足老需求的新商品的种类繁多。 现在有很多新产品,你如果不推广,很多有需求的人都找不到你, 或者找到的不是你。举例啊,如果你不看新闻广告,你都不知道有人在给狗狗举行隆重的葬礼,那么你知道去那里找个满意的祭司么? 有人告诉你说网上。 那么你知道哪家的服务好么? 又有人告诉你说找论坛看评论。 同样,你了解商家怎么推销自己的产品么?他们可以选择在网上打广告, 可以找搜索引擎帮助推广。现在产品的确太多了, 商家太多了, 让你都不知道何去何从。 就说最古老的饮食, 现在遍地是餐饮, 选哪个好了?如果某商家嫌客户少, 想打折推广。 古老的方式是挂大旗,发传单。 而今你要想让更多的人看到, 可以去互联网花钱推广, 可能花同样的钱, 被推广的对象还是有迫切需求的潜在用户。 这样你的广告费用花的会更有效果。 而搜求引擎广告,满足信息查询需求的同时,只要搜索的用户足够多,就会有很多提供服务的商家想请你帮忙做推广,满足他们脱颖而出的广告需求。

因此商家需要搜索引擎来满足它们的广告的推广,商家追求用户和利润是愿意付费的。

第二章 导航模型--草根需求信息

信息爆炸给搜索带来人气, 商品爆炸迫使商家追逐人气, 两者的结合使得搜索引擎成为互联网的宠儿。

第一节 最直观简单模型

在谈及基础前,还有些基础,插曲一下:

1. 什么是顺序文件(Sequential File),什么是随机文件(Random File),两者的优缺点?

2. 什么是索引(Index), 什么是哈希(Hash),两者有关联么?

3. 什么是计算机的金字塔存储系统(Storage Pyramid), 为啥是金字塔状?那寄存器(Register),高速缓存(Cache),内存储器(Internal Storage),外存储器(External Storage)等分别有什么优缺点?

在理想的场景下, 搜索引擎能够对互联网内容进行理解, 并且对用户的提问也能够理解, 然后直接给出用户需要的结果。但是目前计算机技术的发展, 搜索引擎还只能对互联网的页面进行索引(Index), 然后对用户提供的查询词进行分解成关键词(Keywords/Term)。 然后完成基于关键词的搜索(Retrieval)。

这样就搜索引擎就需要首先划分成“网页获取”, “建索引”, “查询”, 这三个大模块, 使得数据流从“互联网”保存到“网页库”, 然后到“索引库”,再到检索服务器, 最后流向用户, 见图(1.1)。

网页获取: 能够及时地, 全部地获取(复制)整个互联网的所有的网页。 我们知道互联网首先已经是海量的, 其次互联网还在动态变化, 每一秒都在变化(增更减)。 加入我们的存储足够大, 读取互联网数据的能力足够快。 那么每天将互联网全部复制一次,就可以满足要求。 显然这是不可能实现的。 那么怎么抓取才能尽可能完整地(entirely),及时地(timely)获得互联网数据呢?

建索引: 将全部网页, 按关键词索引。 由于文档的数量非常大, 并且文档的价值不一样。 要是能将所有新获取的页面, 在每天抓完之后, 当天就能索引完成(fast indexing), 并且索引的访问快速(efficient accessibility), 而且索引的存储空间(small storage space)较小。 并且索引的全部是有意义(valuable)的页面。 显然有点像又要马儿好, 又要马儿不吃草,是难以完美地实现的。 那么如何高效地进行索引成为这个阶段的核心问题。 高效地索引成为这个阶段的核心目标。

查询:对用户的查询词分解成索引能处理的关键词(Terms), 其次查找匹配的文档( resemblance ), 再将文档排序(ranking)后返回给用户。

图(1.1),最直观数据流模型

网页库:保存网页数据, 或保存成自定义结构化数据,或者文本块。 为了提高读写性能,一般会顺序保存。 为了增加空间利用率, 很可能进行压缩写入, 解压读出。 当然网页的相关属性也会保存到网页库, 为的是流水线处理, 尽量减少读写(IO)次数,从而减少处理时间和磁盘/闪盘的损耗。因为互联网的网页数量实在太大了。

索引库:索引库直观上从存储上来说可以是磁盘/闪盘上的一组索引文件。但是要真正完成索引机制—快速查询或者检索, 必然要对应到内存的数据管理。 因此会有对应的索引架构,对索引数据进行金字塔式地管理。一般是内存CACHE->内存高层索引结构->内存底层索引结构->磁盘/闪盘高层索引结构->磁盘/闪盘文件, 这样一个类似的金字塔结构(Pyramid Hierachy)。并且为了进一步提高效率,会采用多机并发,很可能是集群(Cluster)或者分布式(Distributed)的架构。 另外从索引机制上来看, 目前主要是倒排索引(Inverted Index)和顺序(Sequential)或者哈希(Hashing)正排索引的综合体。 倒排索引做到高效地检索, 正派索引可以在保证效率的前提下, 极大地减小倒排索引的索引内容的大小。 因此很是一个综合体架构。

检索服务器:直观上来看,检索服务器做到人机WEB服务接口。 因此可能采用MVC(Model-View-Controller)的模型来剥离WEB和数据(DATA)。 另外检索服务器又要做到查询比较, 涉及到相似性(Resemblance)和排序(Rank)的机制, 也就是说在WEB和DATA之后,必然还有一层进行检索(Retrieval)功能, 因此,检索架构很可能或者至少是一个Web-Data-Retrieval的三层架构。而为了分流用户群和增加安全性(不要把所有鸡蛋放到一个篮子里), 也会结合采用分流并行的架构。

有了数据流模型,不可避免要进行数据处理,数据处理是搜索引擎公司(Google, Baidu, Yahoo等)的核心竞争力, 会涉及到复杂的算法和架构。 另外,又是研究领域的热点和难点, 会有TREC,SIGIR,WWW等很多会议对各方面进行创新。 同时, 开源界也在发力。

首先,数据处理大体以用户可见与否,分成后端和前端两个部分。 将网页库和索引库相关联的部分, 称为后端。 而和互联网与查询词相关联的部分称为前端。后端和信息检索(Information Retrieval)领域更贴近。 前端和WEB技术(Web Technology)更贴近。自此,开始慢慢学习后端模型,这是看不见得的竞争力, 见图(1.2)。

完成“数据获取”的数据处理模型被称为爬虫Spider,从“互联网”获取数据,更新到本地“网页库”的核心程序被称为Spider或者Crawler。一方面,Spider和“互联网”之间要通过Schedule来进行数据获取。另外一方面, Spider又要将数据Update到“网页库”。

完成“建索引”的数据处理模型被称为索引器Indexer, 一方面, Indexer获取“网页库”的数据后, 要进行一次预处理或者清洗, 这也是所有IR领域的常见做法, 为了简化处理和优化效果。 另外一方面, Indexer又要Analyze数据,将结果保存到索引库。 索引库可以是结构化数据结构, 也可以用数据库(Data Base)来保存。

完成“查询”的数据处理模型被称为检索器Retrieval, 一方面, Retrieval要决定读取“索引库”的哪些索引数据。 另一方面, Retrieval要根据Query的相关性(Resemblance)来进行排序(Rank)。 因此这是一个决策机制。 打个简单比喻, 如果前面所有的处理是身体的话, 那么这就是大脑。说句土话,有健康的身体才能为大脑供血, 有牛掰的大脑才能理解用户的需求。

图(1.2),最直观数据处理模型

作者

史春奇,

搜索工程师,

中科院计算所毕业,

[email protected]

第二节 互联网简单模型

管中窥豹, 略见一斑。 由于信息获取的便捷性,和大家的切身体会, 选择中国互联网来讲述简单见解。 这里纯属草根见识, 有专业需求的, 可以参考 Modeling the Internet and the Web . Probabilistic Methods and Algorithm》是形式化描述互联网模型的极好的一本书。豆瓣介绍: http://book.douban.com/subject/1756106/

幻灯片: http://ibook.ics.uci.edu/slides.html

PDF下载:

http://bib.tiera.ru/DVD-010/Baldi_P.,_Frasconi_P.,_Smyth_P._Modeling_the_Internet_and_the_Web._Probabilistic_Methods_and_Algorithms_(2003)(en)(285s).pdf

互联网(Internet)最重要的是互联, 对应的是内联网Intranet或者说局域网LAN。 还记得我当时做双绞线RJ-45的水晶头, 然后把几个机器链接起来, 能够相互之间拷贝电影, 打红警,就很开心。 当时还买书看什么是对等网,星型网络结构。 后面再学ISO七层模型和TCP/IP四层模型等等才知道互联是如何而来的。 自我感觉互联网(Internet)中的互联和搜索引擎的所利用的网页互联,还是不太一样。互联网(Internet)和局域网(Intranet)和LAN的互联, 强调的是物理层上的互联, 是TCP/IP协议的描述。 而搜索引擎所利用的互联, 某种意义上是强调的万维网(World Wide Web)的互联, 是HTTP协议中的超链(hyperlinks)互联。 或许也是计算机领域Net和Web的区别来着。 万维网(WWW)是网站(Website)的互联。如果将一个网页看成承载信息的一个单元, 那么网站可以看成承载一类信息的单元。 而WWW是不同类信息的互联, 是信息的海洋。 我体会较早的上网是1999年开始的Chinaren校友录和263电子邮箱。可以从同学谈话的页面点击跳到同学照片的页面。 正是这种简单的点击跳转,互联了WWW,所以你看到大部分站点的域名是WWW开头的, 表明那是一个Web服务器。 每个网站都有一个首页, 表示这是入口, 从这个入口,应该可以访问整个网站。 随着互联网的发展,网站之间的点击跳转成为必然,起初可能是你自己收藏链接, 慢慢一些门户网站成为大家访问互联网的入口, 从这里你应该可以访问整个万维网, 到如今搜索引擎在这方面起的作用越来越大。 其实搜索引擎也是在利用网站之间的这种点击跳转的互联信息,只不过大大减少了你查看点击跳转后是页面否为目标页面的尝试和时间代价。

1.发展历史

中国互联网发展大事记 》 -- 中国互联网络信息中心(CNNIC), 从中选择了草根基本可以感受到的16个大事。 http://www.cnnic.net.cn/index/0E/21/index.htm

1. 1994 年4 月20 日,NCFC 工程通过美国Sprint 公司连入Internet 的64K 国际专线开通,实现了与Internet 的全功能连接。从此中国被国际上正式承认为真正拥有全功能Internet 的国家。

2. 1994 年5 月,国家智能计算机研究开发中心开通曙光BBS 站,这是中国大陆的第一个BBS 站。

3. 1998 年6 月,CERNET 正式参加下一代IP 协议(IPv6) 试验网6BONE

4. 1999 年7 月12 日,中华网在纳斯达克首发上市,这是在美国纳斯达克第一个上市的中国概念网络公司股。

5. 2000 年12 月12 日,人民网、新华网、中国网、央视国际网、国际在线网、中国日报网、中青网等获得国务院新闻办公室批准进行登载新闻业务,率先成为获得登载新闻许可的重点新闻网站。

6. 2001 年1 月1 日,互联网" 校校通" 工程进入正式实施阶段。

7. 2001 年7 月9 日,中国人民银行颁布《网上银行业务管理暂行办法》。

8. 2001 年12 月20 日,中国十大骨干互联网签署了互联互通协议,这意味着中国网民今后可以更方便、通畅地进行跨地区访问了。

9. 2004 年2 月3 日至18 日,新浪、网易和搜狐先后公布了2003 年度的业绩报告,首次迎来了全年度盈利。

10. 2004 年5 月13 日,网络游戏公司盛大网络正式在美国纳斯达克上市,这是中国网络游戏在纳斯达克证券 市场首次亮相。

11. 2004 年6 月16 日,即时通讯服务提供商腾讯公司正式在香港挂牌上市。

12. 2005 年8 月5 日,百度公司在美国纳斯达克挂牌上市。

13. 2005 年,以博客为代表的Web2.0 概念推动了中国互联网的发展。Web2.0 概念的出现标志互联网新媒体发展进入新阶段。在其被广泛使用的同时,也催生出了一系列社会化的新事物,比如Blog ,RSS ,WIKI ,SNS 交友网络等

14. 2006 年12 月18 日,中国电信、中国网通、中国联通、中华电信、韩国电信和美国Verizon 公司 六家运营商在北京宣布,共同建设跨太平洋直达光缆系统。

15. 2007 年,腾讯、百度、阿里巴巴市值先后超过100 亿美元。中国互联网企业跻身全球最大互联网企业之列。

16. 截止2008 年6 月30 日,我国网民总人数达到2.53 亿人,首次跃居世界第一。7 月22 日, CN 域名注册量以1218.8 万个首次成为全球第一大国家顶级域名。

从《大事记》简单来看, 中国互联网走过了,国际互联, BBS, 新闻网, 校园网, 门户网, 网络游戏, 即时通信, 搜索引擎, WEB2.0, 高速互联, 全民上网。

1. 互联网刚开始的突破是取代印刷页,社交功能还非常低级,人们以获取单一新信息为主。

2. 门户网站标志着信息爆炸(半有序)的初级阶段已经到来, 人们求助于门户来获取综合信息。

3. 网络游戏和即时通信的阶段标志着互联网承载了人与人之间关系的初级阶段。

4. 搜索引擎标志着信息爆炸(半有序)的高级阶段已经到来, 人们求助于搜索来获取任何信息。

5. WEB2.0时代标志着互联网成为人们生活的不可或缺的一部分。

一句话, 来简单回顾互联网发展特征,内容站 => 导航站 => 参与站 => 生活站。

2.大陆互联网现状

既然互联网革命性地改变了人们获取信息的方式。 那么, 就从信息的角度出发来观察互联网。 信息定义为事物存在的方式和运动状态的表现形式。 来主要观察一下信息的载体, 信息随时间的变化情况,信息的数量和质量。 对应到互联网, 网页的构成情况, 页面的更新周期, 网页的数量和质量。

根据《中国互联网络发展状况统计报告(2010年1月)》,中国互联网络信息中心(CNNIC)。

http://www.cnnic.net.cn/uploadfiles/pdf/2010/1/15/101600.pdf , 后面简称“统计报告”。我们可以获取到部分信息: 包括页面编写语言,页面更新周期,页面数目(静态/动态)。

《统计报告-附表 11》, 可以看到静态页面(html/htm), 半静态页面(shtml), 动态页面(php, asp, jsp, aspx)的大致比例是3:1:5的样子。 可以看到超半数信息已经由动态网页在承载。

《统计报告-附表10》,按更新周期分类的网页情况, 75%的信息在半年内将会更新, 55%的信息在一个季度内更新, 30%的信息会在一个月内更新, 8%的信息在一周内更新。 那么估计会有1%以上的信息会在一天内更新。

《统计报告-表 5》可以看到互联网的网页数目336亿, 已经在百亿~千亿的级别之间了。

《统计报告-附表 14 分省网页字节数》可以看到国内平均页面大小是30K左右, 网页总大小在964太(Terabytes)数据。

一句话,目前看到的是动态链接占有很大比例的, 变化很快的, 数据很大的互联网。

《统计报告-附表 11》 按照后缀形式分类的网页情况

网页后缀形式

比例

.html

20.1%

htm

6.5%

/

2.1%

shtml

8.7%

asp

12.6%

php

22.2%

txt

0.0%

nsf

0.0%

xml

0.0%

jsp

1.0%

cgi

0.2%

pl

0.0%

aspx

6.1%

do

0.5%

dll

0.0%

jhtml

0.0%

cfm

0.0%

php3

0.0%

phtml

0.0%

其他后缀

19.7%

合计

100%

《统计报告-附表 10》 按更新周期分类的网页情况

网页更新周期

比例

一周更新

7.7%

一个月更新

21.2%

三个月更新

28.1%

六个月更新

18.8%

六个月以上更新

24.3%

合计

100%

《统计报告-表 5》 中国网页数

单位

2008

2009

增长率

网页总数

16,086,370,233

33,601,732,128

108.88%

静态网页

7,891,388,272

18,998,243,013

140.75%

占网页总数比例

 

49.06%

56.54%

——

动态网页

8,194,981,961

14,603,489,115

78.20%

占网页总数比例

 

50.94%

43.46%

——

静态/ 动态网页的比例

 

0.96:1

1.3:1

——

网页长度(总字节数)

KB

460,217,386,099

1,059,950,881,533

130.32%

平均每个网站的网页数

5,588

10,397

86.06%

平均每个网页的字节数

KB

28.6

31.5

10.30%

《统计报告-附表 14》 分省网页字节数

总页面大小(T)

平均网页大小(K)

北京

289.5

32.2

浙江

119.4

35.2

广东

124.1

26.6

山东

20.7

29.6

福建

40.4

29.7

上海

93.5

30.6

辽宁

12.8

31.8

湖南

8.1

30.5

重庆

7.2

27.3

天津

31.3

33.4

四川

18.9

26.5

江苏

61.8

30.8

甘肃

1.1

28.1

河南

30.0

27.7

河北

22.8

33.0

江西

8.0

26.5

云南

2.4

27.4

湖北

18.4

27.5

陕西

12.1

38.9

青海

0.2

29.5

广西

8.8

34.6

安徽

10.9

27.2

黑龙江

7.2

31.9

吉林

2.7

31.2

海南

5.5

35.5

内蒙古

1.2

28.6

新疆

0.2

26.1

贵州

1.2

24.6

山西

2.1

25.1

宁夏

1.2

26.5

西藏

0.1

43.9

全国

964.0

30.8

质量是个难以简单说明的啦, 是和需求密切相关的东西。 需求是和人密切相关的东西。 人相当复杂, 因此导致质量会比较复杂, 还是从草根需求观望下下罢了。

3.草根需求

作为草根的我,会在网上看看新闻和时事评论, 在自己的博客上发点东西, 闲暇时上个开心, 去好友主页看看。

而我的表弟, 一个在读大学生, 则会不停地折腾QQ, 沉迷于魔兽世界, 疯狂的优酷电影。

我的叔叔, 一个初中教师, 则每次打开,都是hao123主页, 然后去看看新闻, 看看财经频道, 偶尔在小说网站逗留。

从《统计报告-图8》来看, 三个不同年龄段几乎占了80%的用户比例, 所以上述的三个的草根还是代表些什么的。 按这些草根的需求来看, 大致分为: 资讯获取, 大站导航, 草根参与, 网络游戏。 可以对应大致的质量要求是内容准确, 傻瓜指引, 民主生活, 大侠体验。

《统计报告-图 8》 网民年龄结构对比

作者

史春奇,

搜索工程师,

中科院计算所毕业,

[email protected]

第三节 网页抓取简单模型

世界上第一个网络爬虫Spider是由麻省理工学院 (MIT)的学生马休.格雷(Matthew Gray)在 1993 年春天写成的,就在NCSA Mosaic的浏览器发布后数月。他给他的程序起的名字叫“万维网漫游者”("www wanderer")。 Wanderer是用类Perl书写的抓取程序。而第一个在研究论文里面介绍网页抓取的是大卫.艾希曼(David Eichmann)描述的RBSE spider。

图(3.1)Matthew Gray, Google工程师

图(3.2)David Eichmann,爱荷华(Iowa)大学教授

从第一个Spider的出现,人们已经将互联网类比成蜘蛛网, Spider做的事情就是遍历整张网。 吴军(腾讯搜搜EVP(执行副总裁)助理, 前Google研究员)在(数学之美系列六--图论和网络爬虫)有数学模型角度的阐述。

http://www.cqumzh.cn/att_blog/month_0901/a2fe1b64c99263b246e9d923f1055549_1231307756.pdf

1. 最简单Spider抓取模型

Spider抓取整个互联网数据到本地,在我看来有两个基本的假设:

1, 只要从少量网页出发, 最终能遍历整个网络。

2, 只要采用合适的遍历算法,Spider肯定能够在合适时间内遍历整个网络。

这两个基本假设会直接映射到两个现实的问题:

1, 希望随着遍历,互联网的网页数目是能够被穷尽的。

2, 希望算法可以快速区分已遍历和未遍历的网页。

我们知道, 网页可以用URI/URL来标识, 但是不是唯一标识。所以,

1, 希望URL的数据是能够被穷尽的, 会引入问题, 如何标准归一化URL, 尤其动态网页(JSP/ASP/Servlet/PHP)等技术中,URL映射(URL Mapping)技术盛行, 加大了这方面的难度。

2, 算法快速区分已经遍历和未遍历的URL,会引入问题,如何存储和读取URL信息。

根据之前互联网现状, 目前动态网页数量已经超过半壁江山。 动态网页会极大地引入URL标准归一化的难度。 同时会提高爬虫陷阱(Spider Trap)的概率(爬虫陷阱的解决分为网页处理后经验数据解决和目标站点配合解决两种途径)。 这样, 可以大致得出网页库存网页, URL库存链接, 下载器抓取未抓URL的最简单Spider双库(URI库/网页库)抓取模型。

图(3.1.1)最简单Spider双库(URI库/网页库)抓取模型

2. 最简单Spider调度模型

现实中,每个机器的的网卡速度和对应IP的带宽都是有限制的, 而互联网网页的数量都是上千上万亿, 必然需要多个机器并行抓取才能加快。 并且URL抓取肯定需要将HOST变成IP地址, 这就需要DNS解析(Resolver)。 另外, Spider在抓取站点(WebSite)的时候, 需要遵守Robots协议。 Robots协议是一个开放协议, 是为保护目标站点而采取的限制措施, 从而达到双赢(Win-Win)的局面。 例如对可能存在爬虫陷阱(Crawler Trap)的URL path可以在robots.txt禁止抓取, 这样既可以避免Spider的无用功, 另外也可以避免站点的无效抓取比例过高而导致搜索引擎对站点收录降级。

毕竟一个网站的带宽也是有限制的, 在抓取这个网站的时候, 还要考虑这个网站的访问压力(Stress)。 因为不同的站点在访问率(Access Rate)和压力上限(Maximum Stress)都是有预期的。 否则网站就无法提供正常访问服务, 站长极可能封禁(Block)频率大的访问。 这就需要配置站点的抓取频率了, 而互联网的站点都是上亿上千万级别的, 肯定无法一一手动配置, 这就需要有反馈式调度机制了, 需要统计站点的信息。 同时,站点(Website)与域名(Domain Name)是一对多的关系。 而域名(DN)和IP是多对多的关系。 而抓取下载(Download)是和IP关联的。 例如,对可能存在的泛域(Wildcard Domain)特征的站点, 虽然站点的内容是有限的, 但是却可以产生无限的二级域名(Infinite Sub-domain Generator),从而导致无效抓取。 因此,具体到站点的时候, 既要归一化域名(Domain Uniformization), 减少重复抓取, 又要均衡各个IP之间的压力, 提高并发度, 加快站点收录频率。

这样, 加上上述协议和物理上的限制, 在之前的模型上就需要增加多下载器调度(Multi-Downloader Schedule), DNS解析服务(DNS resolver), Robots协议识别(Robots Protocol Checker), 站点特征收集(Website Meta-info Collector)[包括访问量(Maximum Stress),多IP压力均衡(Multi-IP Stress Balance),域名归一化(Domain Uniformization)]等等。 同时, 为了减少网页库的读写, 会将网页内容抽取也会加入进来, 作为网页解析器的功能模块(HTML Parser)。

至此一个简单的网页抓取调度模型就如此初露端倪, 可以大致看到有三个环结构。 涉及面小一点的是调度反馈环,主要会做优化抓取效率的工作。 而调度循环抓取环, 是保证整个流程循环起来的根本,是核心骨架。 涉及面最大的是调度质量控制, 也是最难把握的地方。 正所谓核心竞争力所在。 调度反馈和调度质量控制, 一个追求的是数量, 一个追求的是质量。 很明显,这里三个环的交汇点是调度, 并且最不清楚的地方也是调度。 所以说从最简单的调度模型出发的话, Spider爬虫把几乎所有难点问题都推给了调度。

图(3.2.1)最简单Spider调度抓取模型

另外,爬虫Spider抓取的下载器也随着互联网在全球范围的快速发展而在马不停蹄地升级。 早期的是单机多线程/多进程(单核/多核)的下载器(Multi-Downloader)。采用多下载器模式(Multi-Downloader)可以增加单机的吞吐量, 提高内容和网卡的利用率。 随着互联网数据量进一步增大,和单机存储和带宽的限制, 出现多机并行下载(Paralleled Crawler)。多机并行抓取可以很好地进行负载均衡,而且多机架构容易增加或者减少并行机器来适应抓取状态的变化,同时容易对站点进行划分管理(Partitioning), 让部分机器固定抓取部分站点。进一步随着互联网的全球联网,和跨国搜索巨头的出现, 在各个地区设置抓取中心(Crawler Center),架构分布式抓取(Distributed Crawler)成为趋势。 一方面由于受到地区之间主干网的带宽限制,按地区分布(Locally Distributed)的抓取中心有利于减少延迟(Lower Latency),减小地区间主干出口压力(Internet Backbone Traffic Interchange Politeness),同时有利用对地区语言文化的适应(Linguistic Validation & Cultural Adaptation)。

并行抓取又分为静态并行(Static Paralleled)和动态并行(Dynamic Paralleled), 主要区分在于下载器是由调度来按固定策略预先分配好抓取任务呢,还是下载器动态向调度索取抓取任务。 本质上, 采取合适的策略, 两者可以达到类似的效果。

图(3.2.2)分布式Spider最简单架构

图(3.2.3)静态并行抓取

 

图(3.2.4)动态并行抓取

3. 最简单Spider调度质量模型

大家对一个好的互联网产品都有点了解,泛泛地说首先是要符合互联网发展的现状, 其次要贴近用户的需求, 估计这样基本算一个可用的互联网产品。同样,什么是一个好的调度呢, 类比来说, 首先符合互联网发展现状, 其次贴近用户需求的调度 ,应该算一个可用的调度了吧。 题外话, 对于互联网应用的评价的书写模型的描述, 可以参考南洋理工大学(新加坡)的Devanshu Dhyani的综述《A Survey of Web Metrics》。

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.107.5859&rep=rep1&type=pdf

那么再来看一下互联网的现状和用户需求,说明调度的关注点。

关注点一:

互联网现状之一是互联网的网页数目336亿。 而抓取都是从种子页面(Seeds)开始发散抓取。 如何调度才能保证能够抓全这些网页,召回绝大部分的网页?

关注点二:

互联网现状之二是30%的信息会在一个月内更新, 8%的信息在一周内更新。 如何调度才能保证网页库的更新变化能够跟上互联网的更新变化的节奏?

关注点三:

草根需求之一是内容准确,傻瓜指引,民主生活,大侠体验,那么不同的互联网页面肯定会满足不同人的需求。 那么就需要按用户需求来对网页进行综合评价。 如何调度才能保证体现用户需求的页面被优先抓取呢?

也就是说,从“两个现状,一个需求”出发来评价爬虫调度,应该来说是符合互联网发展现状,贴近用户需求的, 是可以用来评价互联网产品—爬虫调度是否可用。

Yahoo 的Research Barcelona Lab实验室(http://labs.yahoo.com/Yahoo_Labs_Barcelona )的Ricardo Baeza-Yates 和B. Barla Cambazoglu在“Tutorial Yahoo”(http://www.lirmm.fr/~coletta/CaisePresentations/TutorialYAHOO.pdf )的介绍中,对Spider调度的质量三个标准(Quality Metrics):

1. 覆盖面: Crawler发现和下载的互联网页面的百分比。

(Coverage: The percentage of the Web discovered or downloaded by the crawler.)

2. 时新性: 当时保存到本地的互联网原始页面是否更新变化的度量。

(Freshness: Measure of out-datedness of the local copy of a page relative to the page’s original copy on the Web)

3.页面价值:重要或者受欢迎的页面在库里面的比例。

(Page importance: Percentage of important or popular pages in the repository)

注:Ricardo Baeza-Yates 是Yahoo的VP,欧洲和拉美的实验室的头, 信息检索算法和技术方向的ACM Fellow。 智利人, 加拿大名校滑铁卢大学的计算机博士。他最新的SIGIR 2009的文章“Quantifying Performance and Quality Gains in Distributed Web Search Engines. In SIGIR 2009 ”(http://research.yahoo.com/search/node/Quantifying )应该相当值得一读。

http://www.dcc.uchile.cl/~rbaeza/

http://research.yahoo.com/user/70

图(3.3.1)最简单的调度质量控制模型

其中, 对于互联网更新和调度时新性之间的关系, 北京大学王继民在他的2003年的论文: 《国内综合性搜索引擎时新性的计算--计算机工程与应用》有很好的描述。

(http://sewm.pku.edu.cn/TianwangLiterature/Other/%5B%CD%F5%BC%CC%C3%F1,2003a%5D/032116.pdf )

从中可以看到,泊松(Poisson)过程能较好地描述Web页面变化的规律。泊松(Poisson)过程主要有3个特点:(1)事件随机发生;(2)事件之间相互独立;(3)以一个固定频率反复出现。并且根据泊松分布来估算“Web站点的半变化期”,即经过T时间后,一个Web站点所包含网页的一半发生变化1-exp(-λ*T)=0.5。 并且提到两点, 一)二个半月国外大部分后缀的站点基本都更新一半了。 二)国内网页的更新频率要比国外网页慢一些。 从这来看CNNIC的报告《统计报告-附表10》表明国内网页的半变化期为一个季度, 还是相当可信的。

对互联网更新模型有兴趣的读者可以仔细阅读印度马德拉斯理工学院博士Sanasam Ranbir Singh在IJCAI07的论文“Estimating the Rate of Web Page Updates”。

(http://www.aaai.org/Papers/IJCAI/2007/IJCAI07-462.pdf )

前面有提到, 互联可以表现为网站之间的点击跳转和网站内的点击跳转。 同时, 也已经知道互联网的更新相当频繁。 那么必然会有一个网站更新了, 而链接到这个网站的点击链接失效(Link Rot)了。 如果你收藏了这个链接, 直接访问这个链接, 那么这个链接会无法访问, 成为死链(Dead Link / Broken Link)。 可以说链接失效(Link Rot)和死链接(Dead Link)现象是互联本质和更新特征所并生的东西。 如果一个网站的页面更新或者删除了, 那么对于指向这个网站页面的页面来说就是链接失效了(Link Rot), 对于搜索引擎来说, 该页面已经无法访问了,是一个死链接(Dead Link)。 可以说互联网的更新就是互联网的成长过程中的新陈代谢。会产生一批新链接等待Spider去抓取, 同时会产生一批死链接。 已经抓取的部分必然会包含死链, 这就需要Spider重新抓取, 区分出死链并删除。

图(3.3.2)互联网更新(T时间)的简单模型

其实, 除了链接彻底失效外, 还存在一种情况是, 链接依然能够访问, 但是页面的内容已经更新了, 变成了过期页面(Outdated/Obsolete)。 这样Spider获取互联网数据更新到本地网页库的增删改(Create-Delete-Update)就都有了, 再加上读取操作,就是数据存储CRUD操作了。 很多时候,重新抓取的Spider调度和抓取新链接的Spider调度会分开进行。 例如,Google就有传说中的Deepbot和Freshbot两类, Deepbot会深挖未抓取的链接,来扩大覆盖面(Coverage)。 而Freshbot会重新访问(Re-visit/Refresh)已经抓取过的链接, 分析已经抓取过的链接是否已经过期。

图(3.3.3)死链接和刷新简单模型

4. 最简单Spider调度策略模型

目前调度方面首推应该是Carlos Castillo的博士论文《EffectiveWeb Crawling》了,

http://www.webir.org/resources/phd/Castillo_2004.pdf

Carlos Castillo毕业于智利大学(University of Chile), 他的老板就是前面提到的YAHOO大牛&VP,智利人,Ricardo Baeza-Yates

另外对于刷新的调度方面《搜索引擎页面刷新策略研究综述--计算机系统应用》的综述也可以看一下。写的一般吧, 没有把发展趋势调研清楚, 聊胜于无嘛。

http://www.c-s-a.org.cn/ch/reader/view_abstract.aspx?file_no=20090752&flag=1

以调度为名, 选链策略(Selecting/Ordering Strategies)是复杂的东东。 首先, 根据前面提到的抓取(Fetch)和刷新(Refresh), 就可以分为抓取调度和刷新调度。 其次,根据利用经验数据反馈,还分为固定策略调度,和经验反馈策略调度。最后,在调度粒度(Granularity), 就是考虑的目标点就会有地区差异,网站差异,网页差异和链接差异。 然后, 各个粒度层面上, 涉及面也会有差异, 例如地区层面, 有语言,编码等等。 网站层面, 有网站的架构,网站的知名度等等。 网页层面, 有页面的受欢迎程度, 页面的作用类型, 页面的内容相关性。 链接层面, 有链接模式分组, 链接关键词, 路径层次等等。

划分(Divide Standard

是否页面已经抓取入库

抓取(Fetch)

刷新(Refresh)

是否利用经验数据反馈

固定策略

(Regular)

经验反馈策略

(Historical/Empirical Feedback)

表(4.1)调度划分

粒度

(Granularity

地区

(Geographically

网站

(Website

网页

(Page

链接

(Link/URL

层面

(Tracks

语言

(Linguistic)

架构

(Architecture

受欢迎度

(Popularity

模式分组

(Group Pattern

编码

(Encoding)

访问量

(Traffic)

作用类型

(Utility

链接关键词

(URL Keyword)

 

知名度

(Popularity)

内容相关性

(Relevance

路径层次

(Path Depth

 

页面数量和比例

(Quantity & Saturation)

表(4.2)调度粒度划分

前面说到, 一个好的调度, 首先符合互联网发展现状, 其次贴近用户需求的调度。 而用户(草根)需求主要体现在网页价值(Page Importance)。如何评价页面价值?直接的来看,从消费者的角度,如果已知用户需求,那么直接匹配用户需求的, 肯定最有价值的。 间接的来看,从生产者的角度,如果一个网站要做的好, 那么其本身除了内容对用户有价值的同时, 还必须方面用户获取信息,毕竟“酒好不怕巷子深”的产品稀缺的年代已经成为历史。 也就是说网站的架构, 链接的特征要便宜用户访问。

因此网站架构(Website Architecture),和链接路径层次(Link Path Depth)都会涉及到这个间接的评价。 另外也正是搜索引擎对这种间接的评价信任, 引入了搜索引擎优化(Search Engine Optimize),作弊(Search Engine Cheat), 垃圾网站(Spam Website)等搜索引擎相关话题。

那么网站架构在知名搜索引擎看来, 对网页价值(Page Importance)有多大价值呢? 这个不太好评估,不过据Google高级工程师马特.卡茨(Matt Cutts 建议,你要有好内容,还是要想办法方便别人找到。 HI This is the great content I has

http://www.mattcutts.com/blog/

http://v.youku.com/v_show/id_XMTY3NTM2ODQ0.html

{

依然内容为王还是其他(如结构)成为了主流依据? “内容很必要啦,但不充分呀, 怎么着也要让人们能够找到你的内容吧。 不过你要没内容, 要做搜索引擎优化,很有难度!”~ 马特. 卡茨。

Is content still the king or has something else (structure) taken over? "Content is necessary. It's not always sufficient because people have to find out about your content. But if you don't have good content, it's a lot harder to do good search engine optimization for your site." ~ Matt Cutts.

}

说起万维网的时候,一般把互联网看成一个网(Net)。而在描述网站架构的时候, 更多的时候,是看成一棵树。 网站的首页(Homepage/Index)被看成是树根, 链接页(Link)是树枝, 内容页(Content)是树叶。网页简单分为两种类型.一种是以链接(Link)为主的网页.例如一个含有大量链接的导航型网页。另一种是以内容(Content)为主的网页,即含有大量文本内容的普通网页。一种区分的简单而有效的方法是对某一网页进行解析.分析链接中的锚文本长度占网页中的文本总长度的比值。当比值超过一定阈值,则认定此网页为链接页:反之,内容页。 同时将连接主页和重要内容页的链接页称为主干。

图(2.3.4.1)网站树状结构简单模型

1)广度优先 (Breadth First)

a)调度粒度: 网站--架构。

b)调度类型: 抓取/刷新, 固定策略。

c)算法说明: 根据一般网站首页和浅层页面,用户更容易访问到,因此网站会将更多重要的内容放到浅层链接。广度优先就意味说优先抓取浅层链接, 所以是比较调度效果的基线(Baseline), 如果效果比广度优先还差的调度算法就可以忽略啦。Carlos Castillo的博士论文《EffectiveWeb Crawling》的第五章里面说明,《Crawling the Infinite Web: Five Levels are Enough》, 无论是理论还是实践,从一个网站的开始页面, 最多点进3-5层, 就可以覆盖用户现实中会访问的页面的90%。 对重要站点90%的覆盖率可能还足, 但是对于一般站点而言是足够了,也就是说对一般站点而言,跟进(Follow)链接层数不需要超过5层。

d)算法描述: 以队列的方式, 将新发现的链接放到队列的末尾。

2)大站优先(Larger Site First)

a)调度粒度:网站--页面数量和比例

b)调度类型:抓取,固定策略。

c)算法说明:数据很大导致覆盖面是个重点和难点,在考虑覆盖面的时候,希望优先抓取页面量大的站点, 但是又想均衡各站的抓取,患寡亦患不均。 因此在评价站点的时候,如果按已抓取的站点全部链接,或者按已经发现的站点全部链接排序抓取, 会导致胜者全得(Winner-Take-All)的不均境地。 因此按已经发现,待抓取(Pending)的链接来评价。有论文说明单一大站优先的效果要比单一的广度优先策略要佳。

d)算法描述:统计所有站点的未抓取数量, 按从大到小排序,选择TOP N进行一轮抓取, 完成后在循环进入下一轮。

3)骨干链接优先(Skeleton Links)

a)调度粒度:网站--架构。

b)调度类型:抓取,固定策略。

c)算法说明:微软亚洲研究院的Yida Wang等人在SIGIR08年论文中描述利用网站骨干链接优先来抓取的方法, 并且表明此法在论坛等动态页面抓取中更能彰显其价值。《Exploring Traversal Strategy for Web Forum Crawling》

http://research.microsoft.com/pubs/131117/forumcrawl_sigir08.pdf

识别骨干链接后,可以优先抓取独一无二(Unique)的资源, 并且是站点最重要链接,能指向绝大部分价值内容页。

d)算法描述:分为随机抽样(Randon Sampling), 站点导航构建(Sitemap Construction),遍历展开(Traversal Strategy Exploring)和抓取。

随机抽样: 采用双向队列(Double-ended Queue), 结合广度优先和深度优先的遍历采样。 1000个页面已经足够。

站点导航构建: 采用根据网页布局来聚类和链接模式分组结合的方式,构建站点导航。

遍历展开:采用剪枝(Pruning)方法对站点导航,剪枝的标准是正反两条, 选入的话不会引起重复页面大量增加。 剪掉的话不会引起覆盖大幅下降。

抓取: 按遍历展开剪枝后的网站导航进行排序抓取。

4)泊松过程(Possion Process)

a)调度粒度:网站--架构。

b)调度类型:刷新,经验反馈策略。

c)算法说明:《基于泊松过程的爬虫调度策略分析--现代计算机》描述到,

http://d.wanfangdata.com.cn/Periodical_xdjsj-xby200912018.aspx

利用网页更新的泊松模型,得出如果误差控制在10%以内, 这刷新频率要是更新频率的五倍。而初始更新频率由短期内, 根据网页是否为首页(Index),链接页(Link)和内容页(Content)预设更新频率和预定时间。之后根据学习到的更新频率设定刷新频率。

另外对于更新频率预估的方法, 除了上述基于一段时间内网页变化的次数的估算,还有基于一段时间内网页未变化的次数的估算。 《网页变化和增量搜集技术及研究进展—软件学报》

http://www.jos.org.cn/ch/reader/view_abstract.aspx?file_no=20060513

对这种性能更好的模型进行了描述。

d)算法描述:首先区分页面(Index/Link/Content), 然后按F(Index)/F(Link)/F(Content)的频率调度刷新, 当累积更新次数到达阈值X, 开始进行按5*X/t的频率进行刷新调度。

5)导入链接计数 (Backlink Count)

a)调度粒度:页面—受欢迎度

b)调度类型:抓取/刷新, 固定策略

c)算法说明:如果一个页面很受欢迎的话, 那么会有很多其他页面中的链接(Hyperlink)指向该页面, 而那些链接就被称为导入链接或者入链(Backlink/Inlink)。 一般情况下, 导入链接数目愈大, 那么该页面就越受欢迎。 导入链接计数应该是页面受欢迎度计算方面的基线(Baseline), 如果效果比它还差的页面受欢迎度计算的算法可以忽略了。

d)算法描述:预设种子链接的导入链接为零。 当链接抓取之后, 将网页解析出来, 那么解析出来的链接Link的导入链接度(Backlink Count)加一。 将已经发现的链接, 按照导入链接度进行排序。 当进入下一轮抓取的调度抓取的时候, 优先选择导入链接度最高的页面。

6)批量Pagerank(Batch Pagerank)

a)调度粒度:页面—受欢迎度

b)调度类型:抓取/刷新, 固定策略

c)算法说明:导入链接计数的方法无法比较不同导入来源的价值,这时候人们想到了Pagerank算法, 但是由于每次抓取之后都会有链接的变化, 因此选择分批计算一部分链接的Pagerank, 然后从中选择优先调度。

d)算法描述:计算已有链接的Pagerank, 从总选择K个Pagerank高的链接进行调度。在调度完成后, 更新计算Pagerank, 进入下一轮的抓取。

7)部分Pagerank(Partial Pagerank)

a)调度粒度:页面—受欢迎度

b)调度类型:抓取/刷新, 固定策略

c)算法说明:部分Pagerank和批量Pagerank都是预估, 但是批量Pagerank的计算有些频繁, 代价过高。 部分Pagerank是根据Pagerank的思想, 直接将父层页面的Pagerank值按Pagerank的传递公式传给未抓取的子层页面。

d)算法描述:计算已有链接的Pagerank, 从总选择K个Pagerank高的链接进行调度。在调度完成后, 估算解析出来的链接的Pagerank, 等于父页面的Pagerank按导出度划分后的加权。

8)在线页面权重计算(Online Page Importance Computation)

a)调度粒度:页面—受欢迎度

b)调度类型:抓取/刷新, 固定策略

c)算法说明:前面提到导入链接计数的方法无法比较不同导入来源的价值。Pagerank可以大体解决这个问题。 但是Pagerank有个问题是初始化的随机性会导致收敛的时间不可控, 在在线(online)计算中,不方面跟踪和调控。 因此OPIC基于导入链接计数,但是引入了Pagerank的思想, 来部分解决导入来源价值评价的机制。

d)算法描述:首先给所有初始链接固定的现金(Cash)。 每轮抓取完成后, 现金会被出链所划分, 类似遗产划分。 在新一轮开始时, 拥有最多现金的未抓链接(Pending)优先进入下一轮抓取。 如此循环。

9)用户体验为中心抓取(User Centric Crawling)

a)调度粒度:页面—内容相关性

b)调度类型:刷新,经验反馈策略。

c)算法说明:Pandey and Olston提出了以用户体验为中心(user-centric)的刷新策略。《User-Centric Web Crawling》

http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.59.6287&rep=rep1&type=pdf

统计一个页面刷新后对索引质量(主要是排序位置)带来影响的平均值,以及最后一次刷新的时间,来确定刷新的排序,目标是既要降低用户可以遇到的死链接数,优先刷新优质页面。结合用户访问习惯与查询历史,最先刷新与查询相关度高的页面,保证了用户的查询质量。同时结合最近刷新时间,防止页面长时间得不到刷新。

d)算法描述: 具体实现方法如下:首先将查询日志中多词(Phrase/Multi-Words Query)查询转换成多个单词(Single Word Query)查询, 选出有效查询词。 然后对于每个有效查询词,记录更新索引后,页面p 对于查询q 的排序位置r1 和r2。 用r1,r2来估算△Q(p)。 最后,将页面p 的各个历史△Q(p)值求平均得到δQ(p)。 那么刷新优先权值P(p,t)=δQ(p)*(t-LR(p,t)),其中LR(p,t)表示最后一次刷新时间。

这里描述的调度策略都是比较热门的单一模型, 而真正在商业搜索引擎调度的时候, 肯定会将各个调度粒度综合考虑。 而如何综合,这就不得而知了。

5. Spider的常见问题

调度反馈:压力上限控制(Maximum Stress Control),多IP压力均衡(Multi-IP Stress Balance),域名归一化(Domain Uniformization),爬虫陷阱处理(Spider-Trap Handle),泛域二级域名(Wildcard Subdomain/Infinite Domain Name Generators)。

调度循环抓取:分布式抓取框架(Distributed Crawling Architecture),HTML Parser,页面补全(ill-formed HTML Restore),JavaScript链接提取,URL归一化(URL Normalize),URI库存储方式(是否采用Hash还是顺序等等),重定向控制(Redirect Control),登陆页抓取(Login-protected Page Fetch), 增量抓取(Incremental Crawler)。

调度质量控制:覆盖面(Coverage), 时新性(Freshness),页面质量(Page Importance),死链接检查(Dead Link Check),垃圾站控制(Spam Control),链接农场惩罚(Link Farm Penalize)。

 

作者

史春奇,

搜索工程师,

中科院计算所毕业,

[email protected]

你可能感兴趣的:(搜索引擎,互联网,算法,internet,website,网络爬虫)