这就是搜索引擎--读书笔记二

网络爬虫基础

前言

通用搜索引擎的处理对象就是互联网网页,目前网页数量以百亿计,所以搜索引擎首先面临的问题就是:如何能够设计出高效的下载系统,以将如此海量的网页数据传送到本地,在本地形成互联网网页的镜像备份。

网络爬虫即起此作用,它是搜索引擎系统中很关键也很基础的构建。本次总结以及接下来的几次总结主要给大家简单介绍一下与网络爬虫相关的技术。说到爬虫,又想到了Python,所以首先了解一下爬虫的简单机制,这样对学习Python爬虫会有很大的帮助。

通用爬虫框架

如图所示

这是一个通用的爬虫框架流程。

首先从互联网页面中精心选择一部分网页,以这些网页的链接地址作为种子URL,将这些种子URL放入待抓取URL队列中,爬虫从待抓取URL队列依次读取,并将URL通过DNS解析,把链接地址转换成为网站服务器对应的IP地址。然后将其和网页相对路径名称交给网页下载器,网页下载器负责页面内容的下载。对于下载到本地的网页,一方面将其存储到页面库中,等待建立索引等后续处理;另一方面将下载网页的URL放入已抓取URL队列中,这个队列记载了爬虫系统已经下载过的网页URL,以避免网页的重复抓取。对于刚下载的网页,从中抽取出所包含的所有链接信息,并在已抓取URL队列中检查,如果发现链接还没有被抓取过,则将这个URL放入待抓取URL队列末尾,在之后的抓取调度中会下载这个URL对应的网页。这样一直进行下去,直到待抓取URL队列为空,这就代表着爬虫系统已将能够抓取的网页尽数抓完,此时完成了一轮完整的抓取过程。

对于爬虫来说,往往还需要进行网页去重以及网页反作弊(我的读书笔记一中的插图有提到反作弊),而且这是非常重要的一个过滤过程,在这里,我先不讲解反作弊,后面我会慢慢讲解给大家(因为此时的我也不懂反作弊的原理,还在进一步的学习中,所以抱歉)。

上述是一个通用爬虫的整体流程,读完想想还是蛮简单的,我们可以想象成为一只蜘蛛在蜘蛛网上爬行。这里我们再总结一下上述的那段话,宏观角度看爬虫抓取过程中与互联网网页之间的关系可以分为以下5种:

已下载网页集合:爬虫已经从互联网下载到本地进行索引的网页集合。

已过期网页集合:由于网页数量巨大,爬虫完整抓取一轮需要较长时间,在抓取过程中,很多已经下载的网页可能过期。之所以如此,是因为互联网网页处于不断的更新状态中,所以容易产生本地网页中内容和真实互联网里网页的内容不一致的情况。

待下载网页集合:即处于待抓取URL队列中的网页,这些网页即将被爬虫下载。

可知网页集合:这些网页还没有被爬虫下载,也没有出现在待抓取URL队列中,不过通过已经抓取的网页或者在待抓取URL队列中的网页,总是能够通过链接关系发现它们,稍晚时候会被爬虫抓取并索引。

不可知网页集合:有些网页对于爬虫来说是无法抓取到的,这部分网页构成了不可知网页集合。事实上,这部分的网页所占的比例还是很高的。

现在,我们已经知道了通用的爬虫框架,绝大多数爬虫系统遵循此流程,但是并非意味着所有爬虫都如此。大体而言,可以将爬虫划分为3中类型:

批量型爬虫:批量性爬虫有比较明确的抓取范围和目标,当爬虫达到这个设定的目标后,即停止抓取过程。至于具体目标可能各异,也许是设定抓取一定数量的网页即可,也许是设定抓取消耗的时间等。

增量型爬虫:这种爬虫系统会不断地抓取,对于抓取到的网页,要定期更新,因为互联网网页处于不断变化中,新增网页、网页被删除或者网页内容更改都很常见,而增量型爬虫需要及时反映这种情况和变化,所以要处于持续不断的抓取过程中。

垂直型爬虫:垂直型爬虫关注特定主题内容或者属于特定行业的网页,比如对于体育网站来说,就只需要从互联网页面里找到和体育相关的页面内容即可,其他行业的内容不在考虑范围里。

优秀爬虫的特性

爬虫系统和算法设计有一样的道理,如果设计的不是很好,那么不能算作一套优秀的爬虫系统,那么,优秀的爬虫系统具有什么样的特性呢?

高性能

互联网的网页数量庞大如海,所以爬虫的性能至关重要,这里的性能主要是指爬虫下载网页的抓取速度,常见的评价方式是以爬虫每秒能够下载的网页数量作为性能指标,单位时间能够下载的网页数量越多,爬虫的性能就越高。

还有一个方面也是凸显出高性能的特点,那就是爬虫系统得具有针对性。刚才我们有说到爬虫系统需要不断抓取,实时更新,那么如果我们用一套爬虫系统来抓取内容更新速度慢的网页和内容更新速度快的网页,是不是没有那么高效。此时,我们可以采用两套爬虫系统,一套爬虫系统针对更新较慢的网页集合,我们可以以天作为更新周期,另一套爬虫系统针对更新较快的网页集合,我们以秒作为更新周期。这样,明显比只用一套爬虫系统的情况下的性能高的多。

可扩展性

爬虫需要抓取的网页数量巨大,即使单个爬虫的性能很高,要将所有网页都下载到本地,仍然需要相当长的时间周期,为了能够尽可能的缩短抓取周期,爬虫系统应该有很好的可扩展性,即很容易通过增加抓取服务器和爬虫数量来达到目的。

健壮性

不光只有算法设计出现错误时会死循环,爬虫在访问各种类型的网站服务器时,也有可能会遇到很多种非正常状况,比如网页HTML编写不规范,被抓取服务器突然死机,甚至是爬虫陷阱等等。那么在这些情况下,健壮的爬虫系统应该是怎么样的呢?当爬虫程序死掉时,我们再次启动爬虫,能够恢复之前抓取的内容和数据结构,而不是每次都需要把所有工作完全从头做起。

友好性

爬虫的友好性包含两个方面的含义:一是保护网站的部分隐私性,另一方面就是尽量减少被抓取网站的网络负荷。

爬虫抓取的对象是各种类型的网站,对于网站拥有者来说,有些内容并不希望被所有人搜索到,所以需要设定协议来告知爬虫哪些内容是不允许抓取的。目前有两种流行的方法:爬虫禁抓协议和网页禁抓协议。

后话

爬虫技术是一种非常考验实战的技术,如果想要熟悉或了解搜索引擎,那么爬虫应该是必须要学会的。在不久的日子里,我会结合所学的Python基础知识来和大家一起学习Python爬虫。

零搜索引擎经验,零爬虫经验,初手有谦逊的态度和一颗热爱技术的心。

加油!

时间: 2024-10-10 18:19:49

这就是搜索引擎--读书笔记二的相关文章

这就是搜索引擎--读书笔记一

这就是搜索引擎 -- 读书笔记一 相信搜索引擎对于每一个爱好算法甚至爱好技术的IT人员都具有强烈的好奇心吧,因为搜索引擎在互联网中的地位实在是不可撼动.想象如果互联网没有了搜索引擎,那么我们平常技术上出现瓶颈了怎么办?甚至连普通的生活都离不开搜索,大学生的你订餐了吗? 搜索引擎已经发展为每个人上网都离不开的重要工具,其技术发展历程是怎样的呢?其基本目标是什么?核心技术问题又是什么呢?在接下来的一系列博文中,我会根据读书和自己的总结用平乏的语言来表达出来,希望对朋友们有所帮助.另外,博友们如果有好

这就是搜索引擎--读书笔记七--倒排列表压缩算法

倒排列表压缩算法 目前有很多种倒排列表算法可以选择,但是我们对评判算法的优劣需要定量指标.一般会考虑3个指标:压缩率.压缩速度以及解压速度. 压缩率是指数据压缩前和压缩后大小的比例,显然,压缩率越高,就越节约磁盘空间.而压缩速度是压缩单位量的数据所花的时间,但是压缩往往是在建立索引过程中进行的,这是一个后台进行的过程,不需要及时响应用户查询,即使速度慢一些也没有关系.所以普遍来说,压缩速度不是一个重要指标. 那么我们来看看解压速度.顾名思义,解压就是将压缩数据恢复到原始数据.这是一个实时响应过程

这就是搜索引擎--读书笔记四--索引基础

搜索引擎索引基础 前几天我阅读了搜索引擎索引这一章,发现倒排索引这一方法确实很巧妙和迷人,它包含的原理和设计方法很独到.所以接下来,我想把我学习到的索引方面的知识给大家讲解一下,总共分为三篇:索引基础.索引建立和更新.索引查询. 我们首先认识倒排索引基本概念 文档:一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖了更多形式,比如Word.PDF.HTML.XML等不同格式的文件都可以称为文档. 文档集合:由若干文档构成的集合称为文档集

这就是搜索引擎--读书笔记八--检索模型与搜索排序

检索模型与搜索排序 前言 搜索结果排序是搜索引擎最核心的构成部分,很大程度上决定了搜索引擎的质量好坏以及用户接受与否.尽管搜索引擎在实际结果排序时融合了上百种排序因子,但最重要的两个因素还是用户查询和网页的内容相关性及网页链接情况.那么,我们得到用户搜索词之后,如何从内容相关性的角度上对网页进行排序输出呢? 判断网页内容是否与用户查询相关,这依赖于搜索引擎所采用的检索模型.搜索引擎的核心是判断哪些文档是和用户需求相关的,并按照相关程度排序输出,所以相关程度计算是将用户查询和文档进行匹配的过程,而

这就是搜索引擎--读书笔记三

前言 考虑到上次的网络爬虫总结一文对基础的知识还没有介绍完整,所以今天花一点时间来补充上次的网络爬虫基础知识.这次给大家总结了两个方面的内容:暗网抓取和分布式爬虫.希望对阅读本文的博友们有所收获. 暗网抓取 物理学研究表明,在目前宇宙所有物质的总体质量中,星系等可见物质占其中的20%,不可探测的暗物质占据了总质量的80%.互联网中暗网可以与宇宙的暗物质相类比,而其所占网页的比例,更是远大于暗物质占宇宙质量的比例,大约百倍于目前的明网网页. 什么是暗网 所谓暗网,是指目前搜索引擎爬虫按照常规方式很

这就是搜索引擎--读书笔记六--索引的查询

索引的查询处理 为搜索引擎构建索引,其目的是能更快速地提取与用户查询相关的文档信息,假设搜索引擎已经建立了索引,我们如何利用倒排索引来相应用户的查询呢?这一次的总结就是给大家分享一下搜索引擎对于用户查询的处理过程. 目前有两种常见的查询处理机制,一种称为一次一文档方式,另外一种称为一次一单词方式. 下面我们用一个具体例子来分别说明两种基本查询处理方式的运行机制.在这个例子里,假设用户输入的查询为“搜索引擎 技术”,而“搜索引擎”这个单词对应的倒排列表中,文档ID依次为{1,3,4},“技术”这个

这就是搜索引擎--读书笔记五--索引的建立与更新

索引的建立和更新 索引的建立 前一总结里说到,如果索引结构建立好了,可以提高搜索的速度,那么给定一个文档集合,索引是如何建立起来的呢?建立索引的方式有很多种,在这里我就书中提到的三种方法简单总结一下. 两遍文档遍历法 第一次文档遍历 第一次扫描文档集合时,并没有立即开始建立索引,而是收集一些的统计信息,比如文档集合包含的文档个数N.文档集合内包含的不同单词个数M以及每个单词在哪些文档中出现过的信息DF等等.将所有单词对应的DF值全部相加,就可以知道建立最终的索引需要多少内存了,然后在内存中将连续

《卓有成效的程序员》----读书笔记二

六大方面对比Launchy和TypeAndRun(TAR) 对于快速启动工具,很多人都有自己的偏好,多次听到朋友介绍Launchy的好,虽然自己一直在使用着TAR,还是克制不住对于好软件的渴求,下载Launchy进行试用.很多软件都是有一个试用期的,也许新的软件确实不错,但是你习惯了以前使用的那个软件.今天就比较客观的将Launchy和TAR进行一下对比,从界面.上手速度到功能.自定义,以及软件的稳定性.占用资源进行详细的比较. [界面美观]Launchy:毫无疑问这是它的强项.1.0正式版自带

《Programming in Lua 3》读书笔记(二十二)

日期:2014.8.6 PartⅣ The C API 26 Extending Your Application 使用Lua很重要的一点是用来做配置语言.配合主语言做一些功能的配置. 26.1 The Basics 有的时候程序需要配置一些功能信息,很多时候可能有许多别的方法比用lua做配置要更简单:如使用环境变量或者读取文件,读取文件涉及到文件的解析.如果使用Lua进行配置的话,相当于用lua文件替代了要读取的如csv.txt文件等. 使用Lua进行配置的时候,就需要使用Lua API去控制