网络爬虫

网络爬虫(又被称为网页蜘蛛,网络机器人),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。

1、基本知识

URI :Universal Resource Identifier(通用资源标识符)的缩写,Web 上每种可用的资源,如HTML文档、图像、视频片段、程序等都有这样一个唯一通用标识符进行定位。
URL的格式由三部分组成:

  • 协议(服务方式)
  • 存有该资源的主机IP地址(有时也包括端口号)
  • 主机资源的具体地址,如目录和文件名等

第一部分和第二部分用”://”符号隔开,第二部分和第三部分用“/”符号隔开,第一部分和第三部分是不可缺少的,第三部分有时可以省略。


2、爬虫——通过指定URL 抓去网页内容:

   爬虫最主要的处理对象就是URL。爬虫程序根据URL 地址取得所需要的文件内容,然后进行进一步的处理。因此,准确地理解URL对理解网络爬虫至关重要。
  所谓网页抓取,就是指把URL地址中指定的网络资源从网络流中读取出来,保存到本地。类似于使用程序模拟IE浏览器的功能,把URL作为HTPP 请求的内容发送到服务器端,然后读取服务器端的响应资源。

3、处理HTTP 状态码

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

4、宽度优先爬虫、带偏好的爬虫

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

4.1 宽度优先遍历互联网

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值