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

抓取网页

深入理解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).
如图所示:

选择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

  初始的URL地址是爬虫系统中提供的种子URL(一般在系统的配置文件中指定)。当解析这些种子URL所表示的网页时,会产生新的URL(网页上的超链接)。然后,进行以下工作:
(1)把解析出的链接和Visited 表中的链接进行比较,若Visited表中不存在此链接,表示未被访问过
(2) 把链接放入到TODO表中
(3) 当前页面处理完毕后,从TODO表中把当前页面的链接拿出,放入到Visited表中
( 4 ) 继续从TODO表取出上一个页面上解析出来的新的没有被访问过的链接进行解析,如此循环往复。
如下表所示:
表 1.3 网络爬取

TODO表 Visited表
A
BCDEF A
CDEF A,B
DEF A,B,C
EF A,B,C,D
FH A,B,C,D,E
HG A,B,C,D,E,F
GI A,B,C,D,E,F,H
I A,B,C,D,E,F,H,G
A,B,C,D,E,F,H,G,I

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

网络爬虫——原理简介相关推荐

  1. 网络爬虫原理(概要了解)

    一.网络爬虫原理 1.1 等同于浏览器访问网页的原理 (1)真人行为驱动 (2)浏览器自动执行人为的动作,即将动作自动程序化. 1.2 网络爬虫就是将浏览器访问网页的过程,再次抽像成程序. 二.网络爬 ...

  2. 【Java网络编程(一)】IP地址、端口、URL、网络爬虫原理、TCP UDP协议

    IP地址与域名的获取 package cn.hanquan.test;import java.net.InetAddress; import java.net.UnknownHostException ...

  3. [C#搜片神器] 之P2P中DHT网络爬虫原理

    继续接着上一篇写:使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)[搜片神器] 昨天由于开源的时候没有注意运行环境,直接没有考虑下载BT种子文件时生成子文件夹,可能导致有的朋友运行 ...

  4. 网络爬虫-原理篇(一)

    引入:我们在百度首页输入关键字,百度一下,相关的内容就会立马呈现出来,这个动作的背后到底隐藏着哪些操作? 其实百度的核心搜索引擎就是一个大型的分布式网络爬虫程序. 什么是网络爬虫? 详见: 1.百度百 ...

  5. 如何用python实现爬虫_如何用python实现网络爬虫原理?

    对于一个网络爬虫,如果要按广度遍历的方式下载,它就是这样干活的: 1.从给定的入口网址把第一个网页下载下来 2.从第一个网页中提取出所有新的网页地址,放入下载列表中 3.按下载列表中的地址,下载所有新 ...

  6. Java网络爬虫入门:第01课:网络爬虫原理

    引言 随着互联网的迅速发展,网络资源越来越丰富,信息需求者如何从网络中抽取信息变得至关重要.目前,有效的获取网络数据资源的重要方式,便是网络爬虫技术.简单的理解,比如您对百度贴吧的一个帖子内容特别感兴 ...

  7. python网络爬虫原理

    爬虫即网络爬虫,英文是Web Spider.翻译过来就是网络上爬行的蜘蛛,如果把互联网看作一张大网,那么爬虫就是在大网上爬来爬去的蜘蛛,碰到想要的食物,就把他抓取出来. 我们在浏览器中输入一个网址,敲 ...

  8. 数据获取之网络爬虫专栏简介

    一.技术选型 众所周知,针对不同的业务场景和需求选取不同的技术选型和架构方案方案.可以让我们事半功倍,提升工作效率的同时完成本职工作.而针对互联网上的数据获取需求也是一样.下面我们将介绍三种场景的爬虫 ...

  9. Python网络爬虫-原理及基础知识

    爬虫步骤 1.获取网页,使用urllib,requests等第三方库构造HTTP请求 2.提取信息,使用正则表达式或者Beautifulsoup,pyquery,lxml等工具分析网页源码,提取所需要 ...

最新文章

  1. win 复制linux文件命令行,windows与Linux间远程拷贝文件(pscp命令)
  2. 看动画轻松理解“递归”与“动态规划”
  3. android 动态 修改图标,android-动态更改ActionBar中的图标
  4. 上班族吐槽大集合:那些发生在公司的傻X奇遇
  5. kubernets kube-proxy原理分析
  6. typora 分割线_实战 | 五分钟,使用Typora+PicGo提升百倍写作效率
  7. java反射机制及使用案例
  8. 经验:Library Cache Lock之异常分析-云和恩墨技术通讯精选
  9. Python风格总结:元组tuple
  10. CString转换为char*
  11. 联想微型计算机电脑黑屏怎么做系统,联想电脑黑屏怎么办 5种方法轻松排除黑屏故障...
  12. NYOJ题目36-最长公共子序列(经典动态规划题)
  13. 数字电路:边沿触发的D触发器简析
  14. 让Ubuntu 10.04完美支持Thinkpad小红点Trackpoint
  15. 洛谷题集——乒乓球(思维、乒乓球比赛规则)
  16. 清除html页打印的页眉,删除html中的页眉和页脚以打印页面
  17. ActivitiUFLO2Snaker流程引擎对比分析
  18. 【力扣17】电话号码的字母组合
  19. DHT11大气温湿度模块+直流电机实现根据温度控制风扇转动
  20. 【文献心得】内存隔离技术研究现状调研

热门文章

  1. 文献阅读(44)—— 基于眼底照的近视深度学习算法和区块链平台,以促进人工智能医学研究:回顾性多队列研究
  2. 太原理工大学系统分析与设计实验报告实验室设备_“艺术之光”绽放太原理工大学首届本科生专业节...
  3. 2022年武汉专精特新小巨人企业奖励补贴以及申报条件汇总
  4. Combining Word and Entity Embeddings for Entity Linking
  5. 11亿年轻人听力受损:先别担心头发了,你都要聋了!
  6. 使用imagemagic生成动态图片GIF
  7. Typora-PicGo-SMMS图床(Mac电脑和windows电脑)
  8. 全息网御上榜《CCSIP 2022中国网络安全产业全景图》
  9. springboot聚合工程讲解与部署
  10. 基于企业战略的业务流程重组与外包(2) (转载)