网络爬虫——原理简介

全面剖析网络爬虫(笔记)

抓取网页

深入理解URL

URI :Universal Resource Identifier(通用资源标识符)的缩写,Web 上每种可用的资源,如HTML文档、图像、视频片段、程序等都有这样一个唯一通用标识符进行定位。
URI 由三部分组成:
1. 访问资源的命名机制
2. 存放资源的主机名
3. 资源自身的名称,通常由路径表示
例子:http://www.webmonkey.com.cn/html/html40/
解释:这是通过http协议进行访问的资源, 位于主机www.webmonkey.com.cn上,通过路径 /html/html40/ 进行访问
URL : URL 是URI的一个子集,是Uniform Resource Locator 的缩写(统一资源定位符)。通俗地说,URL 是Internet上描述信息资源的字符串,主要用在各种www 客户程序和服务器上。采用URL 可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL的格式由三部分组成:
- 协议(服务方式)
- 存有该资源的主机IP地址(有时也包括端口号)
- 主机资源的具体地址,如目录和文件名等
第一部分和第二部分用”://”符号隔开,第二部分和第三部分用“/”符号隔开,第一部分和第三部分是不可缺少的,第三部分有时可以省略。
URL 例子参考:
1. HTTP 协议的URL示例
例: http://www.peopledaily.com.cn/channel/welcome.htm
计算机域名为 www.peopledaily.com.cn 超级文本文件 是在目录/channel 下的welcome.htm
2. 文件的URL
用URL 表示文件的时候,服务器方式用file 表示,后面要有主机IP地址、文件的存取路径和文件名等信息。有时可以省略目录和文件名称,但”/”符号不能省略。
例:file://ftp.yoyodyne.com/pub/files/foobar.txt
这个URL代表放在主机ftp.yoyodyne.com 上的pub/files/目录下的一个文件,文件名称是foobar.txt
例:file://ftp.yoyodyne.com/pub
代表主机 ftp.yoyodyne.com 上的目录/pub
例: file://ftp.yoyodyne.com/
代表主机ftp.yoyodyne.com的根目录
爬虫最主要的处理对象就是URL,它根据URL 地址取得所需要的文件内容,然后对它进行进一步的处理。因此,准确地理解URL对理解网络爬虫至关重要。

通过指定URL 抓去网页内容

  所谓网页抓去,就是指把URL地址中指定的网络资源从网络流中读取出来,保存到本地。类似于使用程序模拟IE浏览器的功能,把URL作为HTPP 请求的内容发送到服务器端,然后读取服务器端的响应资源。

处理HTTP 状态码

  HTTP 状态码表示HTTP协议所返回的响应的状态。比如客户端向服务器发送请求,如果成功地获得请求的资源,则返回的的状态码为200,表示响应成功。如果请求的资源不存在,则通常返回404 错误。
HTTP 状态码通常 分为5种类型,分别以1~5 五个数字开头,由3位组成。1XX 通常用作实验用途。这里主要介绍2XX、3XX、4XX、5XX 等常用的几种状态码

状态码代码描述处理方式
200请求成功获得响应的内容,进行处理
201请求完成,结果是创建立刻新资源,新创建资源的URI可在响应的实体中得到爬虫中不会遇到
202请求被接受,但处理尚未完成阻塞等待
204服务器端已经实现请求,但是没有返回新的信息。如果客户是用户代理,则无须为此更新自身的文档视图丢弃
300该状态码不被HTTP/1.0的应用程序直接使用,只是作为3XX类型回应的默认解释,存在多个可用的被请求资源若程序中能够处理,则进行进一步处理,如果程序中不能处理,则丢弃
301请求到的资源都会分配一个永久的URL,这样就可以在将来通过该URL来访问此资源重定向到分配的URL
302请求到的资源在一个不同的URL处临时保存重定向到临时的URL
304请求的资源未更新丢弃
400非法请求丢弃
401未授权丢弃
403禁止丢弃
404没有找到丢弃
5XX回应代码以”5”开头的状态码表示服务器端发现自己出现错误,不能继续执行请求丢弃

当返回的状态码为5XX 时,表示应用服务器出现错误,采用简单的丢弃处理就可以解决。

宽度优先爬虫和带偏好的爬虫

   互联网可以看成一个超级大的“图”,而每个页面可以看作是一个“节点”,页面中的链接可以看成是图的”有向边”。因此能够通过图的遍历的方式对互联网这个超级大“图”进行访问。图的遍历通常可分为宽度优先遍历和深度优先遍历两种方式。另一方面,在抓取的时候,有时候也不能完全按照宽度优先遍历的方式,而是给待遍历的网页赋予一定的优先级,根据这个优先级进行遍历,这种方法称为带偏好的遍历。

图的宽度优先遍历

  图的宽度优先遍历(BFS)算法是一个分层搜索的过程,和树的层序遍历算法相同,在图中选中一个节点,作为起始节点,作为起始节点,然后按照层次遍历的方式,一层一层地进行访问。图的宽度优先遍历需要一个队列作为保存当前节点的子节点的数据结构。具体的算法如下:
(1) 顶点V入队列
(2) 当队列非空时继续执行,否则算法为空
(3) 出队列,获得队头节点V,访问顶点V并标记V已经访被访问过
(4)查找顶点V的第一个邻接顶点col
(5) 若V的邻接顶点col 未被访问过,则col 进入队列
(6) 继续查找V 的其他邻接顶点col,转到步骤(5),若V 的所有邻接顶点都已经被访问过,则转到步骤(2).
如图所示:
图1.3
选择A作为种子节点,则宽度优先遍历的过程如下表所示:
表 1.2

操作队列中的元素
初始
A入队列A
A出队列
BCDEF 入队列BCDEF
B出队列CDEF
C出队列DEF
D出队列EF
E出队列F
H入队列FH
F出队列H
G入队列HG
H出队列G
I入队列GI
G出队列I
I出队列

由表1.2 所示的遍历过程,出队列的节点顺序既是图的宽度优先遍历的访问顺序,由此可以看出,图1.3 所示的宽度优先遍历的访问顺序为:
A->B->C->D->E->F->H->G->I

宽度优先遍历互联网

  宽度优先遍历是从一个种子节点开始的,而实际的爬虫项目是从一系列的种子链接开始的。种子链接就像是宽度优先遍历的种子节点。例如可以指定www.163.com和www.sina.com 两个种子链接。
  链接的子节点是html 页面上的超链接,对html文档,比如Excel 文件,不能从中提取超链接,因此可以看作是图的“终端”节点。
  整个宽度优先爬虫过程就是从一系列的种子节点开始,把这些网页中的“子节点”(也就是超链接)提取出来,放入队列中依次抓取。被处理过的链接需要放入一张表(称为Visited 表——已访问表)中。每次新处理一个链接之前,需要查看这个链接是否已经存在于Visited表中。如果存在,证明链接已经处理过,跳过,不做处理,否则进行下一步处理。实际过程如下:
图 1.5
图1.5
  初始的URL地址是爬虫系统中提供的种子URL(一般在系统的配置文件中指定)。当解析这些种子URL所表示的网页时,会产生新的URL(网页上的超链接)。然后,进行以下工作:
(1)把解析出的链接和Visited 表中的链接进行比较,若Visited表中不存在此链接,表示未被访问过
(2) 把链接放入到TODO表中
(3) 当前页面处理完毕后,从TODO表中把当前页面的链接拿出,放入到Visited表中
( 4 ) 继续从TODO表取出上一个页面上解析出来的新的没有被访问过的链接进行解析,如此循环往复。
如下表所示:
表 1.3 网络爬取

TODO表Visited表
A
BCDEFA
CDEFA,B
DEFA,B,C
EFA,B,C,D
FHA,B,C,D,E
HGA,B,C,D,E,F
GIA,B,C,D,E,F,H
IA,B,C,D,E,F,H,G
A,B,C,D,E,F,H,G,I

宽度优先遍历是爬虫使用最广泛的一种爬虫策略,原因有三:
- 重要的网页往往离种子链接比较近
- 万维网的实际深度最多能达17层,宽度优先遍历能以最快的速度到达这个网页
- 宽度优先有利于多爬虫的合作抓取,多爬虫合作通常先抓取站内链接,抓取的封闭性很强。

  • 5
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值