搜索引擎的初步认知

搜索引擎(search engine)是指根据一定的策略、运用特定的计算机程序搜集互联网上的信息,在对信息进行组织和处理后,为用户提供检索服务的系统。

搜索的三部曲:1,搜集数据 2,处理数据 3,查询数据



Crawler

seeds

像所有的爬虫进程一样,需要一个存放在文本中的种子(seed)列表。它的其他参数有:

  • 发出链接—— 用于从一个种子的抓取结果指定需进一步抓取的链接。
  • 深度—— 为种子(seed)限定的URL深度。
  • 抓取类型—— 同时多种深度或者一次一种深度
  • URL数量—— 指定最大可抓取的URL数量。
  • MIME类型—— 指定抓取的页面类型
  • 分析选项—— 有多种分析类型供选择,如关键字匹配,正则表达式匹配,运行客户程序进行分析等。

运行任务时,爬虫从起初提供的种子开始抓取Web页面,参考发出链接的设置,对抓取的内容进行分析。它提供了简单的分析,如指定匹配关键字 或基于正则表达式筛选信息。

动态网页

静态网页不多,下载的网站多以动态页面为主。除非有特别针对动态网页做静态话的。对于搜索引擎而言,动态网页,没有静态网页利于抓取。因为动态网页中,包含很多脚本。所以,可以采取如下的两种方法:

1,抓取html和js,利用js引擎,最终生成整个页面的DOM TREE

2,将抓取到的网页,交给webkit (浏览器)运行产生结果后再利用

扩展策略

抓取连接的策略,比如是深度还是广度优先

Politeness

爬虫会对一个站点去抓网页,但是这样很有可能给网站带来流量的消耗,导致网站不可用,所以需要有所控制。一般是通过控制IP在某个时间段内的流量和频度。一般Crawler的ip会变的,会分配一些IP供爬虫来用,防止被抓取的网站屏蔽IP。


Robots.txt ->该文本文件会放在网站的根目录下,只是一种建议,告知爬虫哪些可以抓取,哪些不可以抓取,但是这个不是强制的。像淘宝就禁止百度的爬虫。其robots.txt的文件内容为:

User-agent: Baiduspider
Disallow: /

User-agent: baiduspider
Disallow: /

Trap

爬虫的抓取需要有节制,可以根据URL Pattern,或者判断目录下的东西是否有价值,无价值就停止抓取。

刷新

信息在变,需要一定的频度来抓取,根据信息变化的频率,来对其进行升级和降级处理

索引器

网页去重:去除重复内容和链接等

页面分析,格式转换:word,pdf这些还好,对于flash就比较麻烦,因为其中包含很多ActionScript

分词:根据此表,对内容进行分词,有些专用的名词,需要自己维护。

倒排索引:区别于正排索引,有时候索引比较大,需要压缩。正排索引,利于过滤和排序。倒排索引便于查询。

文本相关性:spam,对于cheat(比如关键词非常多)的直接删除索引

屏蔽敏感词

倒排表 ->搜索功能
正排表->统计,过滤,排序
内存索引->速度
增量索引->实时性,区别于全量索引,增量代价较小,需要做索引更正,但是会出现错误

在搜索引擎的一次查询中要做的事情很多,比如分词,对查询词改写(比如搜索耐克,那么会自动将英文的nake也作为查询词,即耐克 or nake)或者纠错(用户拼写错误)

附上谷歌的搜索原理:



 

猜你喜欢

转载自jianchen.iteye.com/blog/963620