现代意义上的搜索引擎的祖先,是1990年由蒙特利尔大学学生Alan Emtage发明的Archie。虽然当时World Wide Web还未出现,但网络中文件传输还是相当频繁的,而且由于大量的文件散布在各个分散的FTP主机中,查询起来非常不便,因此Alan Emtage想到了开发一个可以以文件名查找文件的系统,于是便有了Archie。
Archie工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。由于Archie深受用户欢迎,受其启发,美国内华达System Computing Services大学于1993年开发了另一个与之非常相似的搜索工具,不过此时的搜索工具除了索引文件外,已能检索网页。
Archie工作原理与现在的搜索引擎已经很接近,它依靠脚本程序自动搜索网上的文件,然后对有关信息进行索引,供使用者以一定的表达式查询。由于Archie深受用户欢迎,受其启发,美国内华达System Computing Services大学于1993年开发了另一个与之非常相似的搜索工具,不过此时的搜索工具除了索引文件外,已能检索网页。
当时,“机器人”一词在编程者中十分流行。电脑“机器人”(Computer Robot)是指某个能以人类无法达到的速度不间断地执行某项任务的软件程序。由于专门用于检索信息的“机器人”程序象蜘蛛一样在网络间爬来爬去,因此,搜索引擎的“机器人”程序就被称为“蜘蛛”程序。
首先要谈蜘蛛程序,不得不和搜索引擎拉上关系,提到搜索引擎,大家都不陌生,例如大家熟悉的google
,百度,网络的信息浩如烟海,搜索引擎如海中灯塔,在人获得知识过程中起了极其巨大的作用.
搜索引擎按功能分成三个模块,分别是:
1.网页抓取:搜索引擎的网页抓取功能主要通过蜘蛛程序(又称爬虫程序)完成;
2.网页处理:将抓取的网页进行处理,形成索引,便于搜索;
3.服务:为用户提供搜索服务.
那么搜索引擎是如何根据你输入的关键字返回给你相关的结果并提供连接的呢?这就需要用到网络爬虫,也就是这里要说的蜘蛛程序。
搜索引擎按功能分成三个模块,分别是:
1.网页抓取:搜索引擎的网页抓取功能主要通过蜘蛛程序(又称爬虫程序)完成;
2.网页处理:将抓取的网页进行处理,形成索引,便于搜索;
3.服务:为用户提供搜索服务.
那么搜索引擎是如何根据你输入的关键字返回给你相关的结果并提供连接的呢?这就需要用到网络爬虫,也就是这里要说的蜘蛛程序。
蜘蛛程序要做的事情就是走遍这个网的所有节点,并且把每个节点的相关内容进行处理记录,其实说走遍是不可能的,因为当今的InterNet结构实在αβΩ的复杂,也太多,只能尽可能地走,那么这基本就是各搜索引擎商比能力之处了,谁走的节点多,谁就是最出色的搜索引擎商,别人走不到的节点,你走到了,那么你就“轻松一点,胜人一筹”,走的节点多少,算法是否高效,此乃决定胜负的关键。呢么究竟如何走,如何处理如何记录,要说其实不是三言两语可以讲明白,下面简单介绍一下搜索引擎是如何走这些节点,还有就是如何为网民用户提供相关网络节点节点的信息:
1、搜集
在这个流程中,用网络爬虫或者叫spider的程序模块,不断地从web上寻找网页并且下载下来。最长用的方法是,把整个web网络看作是一个有向图,从种子URL集合开始,开始抓取并且存到本地,并且解析出网页内容中包含的url链接,然后把这些新的url加到url集合中。一般按照宽度优先的方式来查找。这个过程不断重复直到URL集合中所有链接都已经采集过,或者是采集时间限制到了,或者是所有的不超过某一深度的连接都已经采集过了。这些下载下来的网页的标准html文本,以及采集url,采集时间等要素都要记录下来。
采集器还要注意对被采集网站的影响,避免采集造成***式的后果。
2、预处理
这个过程比较复杂
2.1 对html网页进行解析并且建立索引
html网页需要去掉html标签和一些垃圾连接,比如广告等。 对于网页的正文内容要建立索引。索引是检索最重要的数据来源,对于检索速度和效果影响是根本性的。在索引中词和网页都用数字来标记。 常用的是倒排索引,格式如下 termid : docid1 docid2 ...docid3 . 其中termid也就是我们常说的词,(这个要通过对网页内容切词/分词之后得到),在索引中一般用词的编号来代替。docidx是所有包含该term的网页的编号。
2.2 计算每篇网页的重要程度。 一般各个网站的首页都比较重要,需要赋予较高的权重。常用的方法是利用网页之间的链接关系,类似学术研究上的相互引用关系,来计算每个网页的重要性,这就是page rank . google就是靠它起家的.
2.3 重复网页的消除. 网络上的网页多是好几份的,大家你抄我的我抄你的,连个错别字都不会改的情况都存在. 这些重复网页浪费了搜索引擎的代价,更重要的是影响检索的效果.
3、 检索服务
我们在检索端输入查询串之后,要经过分词处理.然后利用的到词,得到termid,到前面2.1 生成的索引查找, 得到符合检索条件的网页的id. 然后用网页的内容计算的权重和2.2 计算的page rank数值,以及其他的权重(比如 anchor text 等) 一起对每个网页给出一个最终权重. 这些网页按照权重从大到小的排序之后输出. 就是我们看到的检索结果了.
当然这里谈到的只是一些最基本的实现方法. 其实每个步骤都是非常复杂的一项工作,很多的技巧在里面,比如存储结构,比如一些自然语言处理技术,比如分类.聚类等.上面的方法只能做一个demo系统,要真正的高性能的好的系统,还要其他更深的技术.搜索引擎是个高门槛的东西。
在这个流程中,用网络爬虫或者叫spider的程序模块,不断地从web上寻找网页并且下载下来。最长用的方法是,把整个web网络看作是一个有向图,从种子URL集合开始,开始抓取并且存到本地,并且解析出网页内容中包含的url链接,然后把这些新的url加到url集合中。一般按照宽度优先的方式来查找。这个过程不断重复直到URL集合中所有链接都已经采集过,或者是采集时间限制到了,或者是所有的不超过某一深度的连接都已经采集过了。这些下载下来的网页的标准html文本,以及采集url,采集时间等要素都要记录下来。
采集器还要注意对被采集网站的影响,避免采集造成***式的后果。
2、预处理
这个过程比较复杂
2.1 对html网页进行解析并且建立索引
html网页需要去掉html标签和一些垃圾连接,比如广告等。 对于网页的正文内容要建立索引。索引是检索最重要的数据来源,对于检索速度和效果影响是根本性的。在索引中词和网页都用数字来标记。 常用的是倒排索引,格式如下 termid : docid1 docid2 ...docid3 . 其中termid也就是我们常说的词,(这个要通过对网页内容切词/分词之后得到),在索引中一般用词的编号来代替。docidx是所有包含该term的网页的编号。
2.2 计算每篇网页的重要程度。 一般各个网站的首页都比较重要,需要赋予较高的权重。常用的方法是利用网页之间的链接关系,类似学术研究上的相互引用关系,来计算每个网页的重要性,这就是page rank . google就是靠它起家的.
2.3 重复网页的消除. 网络上的网页多是好几份的,大家你抄我的我抄你的,连个错别字都不会改的情况都存在. 这些重复网页浪费了搜索引擎的代价,更重要的是影响检索的效果.
3、 检索服务
我们在检索端输入查询串之后,要经过分词处理.然后利用的到词,得到termid,到前面2.1 生成的索引查找, 得到符合检索条件的网页的id. 然后用网页的内容计算的权重和2.2 计算的page rank数值,以及其他的权重(比如 anchor text 等) 一起对每个网页给出一个最终权重. 这些网页按照权重从大到小的排序之后输出. 就是我们看到的检索结果了.
当然这里谈到的只是一些最基本的实现方法. 其实每个步骤都是非常复杂的一项工作,很多的技巧在里面,比如存储结构,比如一些自然语言处理技术,比如分类.聚类等.上面的方法只能做一个demo系统,要真正的高性能的好的系统,还要其他更深的技术.搜索引擎是个高门槛的东西。
转载于:https://blog.51cto.com/zqlovejing/162688