搜索引擎的原理
一、 搜索引擎蜘蛛
搜索引擎蜘蛛(spider),可简称为蜘蛛,本意为搜索引擎机器人(robot),称为蜘蛛的原因是将互联网比喻成蜘蛛网,将机器人比喻成了在网上爬行的蜘蛛,是搜索引擎自动抓取网页的程序。
搜索引擎蜘蛛的作用:通过这些搜索引擎蜘蛛的爬行会自动将网页添加到搜索引擎的数据库当中,搜索引擎蜘蛛会自动判断网页的质量,根据既定的程序判断是否抓取。
搜索引擎蜘蛛的名称:以下为目前国内知名度比较高的搜索引擎的名字,还有很多的搜索引擎蜘蛛但是由于知名度不高,我就不一一列举了。
- Google的蜘蛛: Googlebot 、
- 百度的蜘蛛:baiduspider 、
- 雅虎中国的蜘蛛:Yahoo! Slurp China 、
- MSN的蜘蛛:Msnbot 、
- 有道的蜘蛛:YoudaoBot、
- 搜狗的蜘蛛:Sogou web spider
查看搜索引擎蜘蛛的来访记录,需要通过网站访问日志文件来查看,具体获取方法请咨询服务器提供商。
如果你想获得搜索引擎蜘蛛的亲赖,希望他天天爬行抓取网页的话,那就需要持续保持原创文章的更新,并且定期交换友情链接。
如果你不希望某个搜索引擎的蜘蛛来抓取你的网页,可以通过设置robots.txt来禁止抓取。
二、搜索引擎的原理
搜索引擎,需要解决的技术问题总的分为:蜘蛛程序、分类建立索引、词库、排序算法因素、数据库索引和优化、数据库结构--蜘蛛。
目前看来,蜘蛛可以用C或者PHP来实现。百度的蜘蛛多半是C做的,C同样可以支持多个数据库的连接接口,并且C的运行效率比PHP高,C也更能控制底层。
C虽然这么好,我还是想用PHP做,时间上必须更多的节约出来,不能再去学C。如果以后需要高效率要用C,再用C做,数据库可以不变,MYSQL可以和C连接。
PHP有优点也有缺点,做蜘蛛,问题应该不大,最大的问题 是有可能速度很慢。
1、抓取网页
抓取网页,有可能出现的问题是,抓取顺序,抓取如果不成功或超时等问题该如何纪录,下次又什么时候更新抓取。搜索引擎的 数据库最开始是新的,没有任何网址的,需要大量加入网址。
这里可以用for循环语句,按照英文字母自动循环。当然,网站建设不只有英文,还有和数字,这些只能手工输入了。如果还是循环抓取,估计有很多都要落空。抓到的代码需要分析编码类型是utf-8还是gb2312.我的搜索引擎只想抓简体中文。
如果抓取超时,则记录,下次大概十天之后再抓取,如果连续超时三次,将T出数据库。
这里可以用for循环语句,按照英文字母自动循环。当然,网站建设不只有英文,还有和数字,这些只能手工输入了。如果还是循环抓取,估计有很多都要落空。抓到的代码需要分析编码类型是utf-8还是gb2312.我的搜索引擎只想抓简体中文。
如果抓取超时,则记录,下次大概十天之后再抓取,如果连续超时三次,将T出数据库。
2、建立索引
索引的建立是个很棘手的问题,百度和谷歌可以用自 己的服务器群建立分布式的服务器。我可没那么多服务器。所以我想换个方法。建立静态页面。之前我才知道,在百度和谷歌输入一个比较生僻的词 ,会花费0.2秒左右的时间,一般的常见词语只需要0.1秒。并且,第二次重复输入一个词所需要的查询时间要少得多。这个多半就是索引的影响。
假如索引是放内存里,读取速度将是非常OK的。我只有一台服务器,就算只放常见的5万个查询词语的索引进去,估计也有点累。一个页面至少有20K, 5万个页面就是20K*50=1G。这还只是5万个词的第一个页面。如果用户要翻页查询呢,内存肯定不够。假如只放第一页进内存,用户翻页查询,速度 将无法解决。所以我准备全静态。把5万个词语的查询模拟一次,然后生成静态页面。所有词的第一页放内存,后面的页面放硬盘里。如果能把页面 放内存,这个问题就已经解决了。
3、词库
汉字千千万,常用的汉字也至少三千个。组成的词语常用的估计有2万。这个词库来怎么添加进去?用什 么格式存放?CSV文件还是数据库还是文本文件?之前我想过把金山词霸的词库文件找到,想办法直接复制过来,此方法目前还没成功。
4、排序算法
所有的影响排序的算法,应该是放一个表里,然后分固定算法,就是网站本身的因素,还有变动算法,就是用户输入的词语或因为时间季节等不同而变化的因 素。固定算法就放一个表里,对每个网站算出总分。变动算法的一部分是之前已经产生,一部分是用户输入之后才算出。
5、数据库索引
数据库的索引目前还没 有很好的解决办法,一个表达索引肯定不能太多,多了会影响速度。六.数据库的结构。这个很关键。估计要在网站前台界面出来之前就得先把数据 库结构定下来。还要为以后的升级留下接口,比如算法因素要增加,或者为了优化查询语句,要变动字段等等。
参考推荐: