互联网时代网络爬虫系统的原理和工作流程详解!
优采云 发布时间: 2021-06-26 04:12互联网时代网络爬虫系统的原理和工作流程详解!
网络数据采集是指通过网络爬虫或网站public API从网站获取数据信息。这种方法可以从网页中提取非结构化数据,将其存储为统一的本地数据文件,并以结构化的方式存储。支持采集图片、音频、视频等文件或附件,可自动关联附件和文字。
在互联网时代,网络爬虫主要为搜索引擎提供最全面、最新的数据。
本节首先简要介绍网络爬虫的原理和工作流程,然后讨论网络爬虫的爬取策略,最后介绍典型的网络工具。
网络爬虫原理
网络爬虫是根据一定的规则自动抓取网络信息的程序或脚本。
网络爬虫可以自动采集所有可以访问的页面内容,为搜索引擎和大数据分析提供数据源。就功能而言,爬虫一般具有数据采集、处理和存储三个功能,如图1所示。
图 1 网络爬虫*敏*感*词*
网页中除了供用户阅读的文字信息外,还收录一些超链接信息。
网络爬虫系统通过网页中的超链接信息不断获取互联网上的其他网页。网络爬虫从一个或几个初始网页的URL开始,获取初始网页上的URL。在抓取网页的过程中,不断地从当前页面中提取新的URL并将其放入队列中,直到满足系统的某个停止条件。
网络爬虫系统一般会选择一些比较重要的网站 URL,外展度(网页中超链接的数量)较高作为*敏*感*词*URL集合。
网络爬虫系统使用这些*敏*感*词*集合作为初始 URL 来开始数据爬取。由于网页收录链接信息,所以会通过现有网页的网址获取一些新的网址。
网页之间的指向结构可以看成是一片森林,每个*敏*感*词*URL对应的网页就是森林中一棵树的根节点,这样网络爬虫系统就可以按照广度优先搜索算法进行搜索或者深度优先搜索算法遍历所有网页。
因为深度优先搜索算法可能会导致爬虫系统陷入网站内部,不利于搜索更接近网站首页的网页信息,所以广度优先搜索算法采集页一般使用。
网络爬虫系统首先将*敏*感*词*URL放入下载队列,简单地从队列头部取出一个URL下载对应的网页,获取网页内容并存储,解析链接后网页中的信息,你可以得到一些新的网址。
其次,根据一定的网页分析算法过滤掉与主题无关的链接,保留有用的链接,放入URL队列等待抓取。
最后,取出一个网址,下载其对应的网页,然后解析,如此重复,直到遍历全网或满足一定条件。
网络爬虫工作流程
如图2所示,网络爬虫的基本工作流程如下。
1) 首先选择*敏*感*词* URL 的一部分。
2) 将这些 URL 放入 URL 队列进行抓取。
3)从待爬取的URL队列中取出待爬取的URL,解析DNS得到主机的IP地址,下载该URL对应的网页并存储在下载的网页中图书馆。另外,将这些网址放入抓取到的网址队列中。
4)对爬取的URL队列中的URL进行分析,分析其中的其他URL,将这些URL放入URL队列进行爬取,从而进入下一个循环。
图 2 网络爬虫的基本工作流程
网络爬虫抓取策略
谷歌、百度等通用搜索引擎抓取的网页数量通常以亿为单位计算。那么,面对如此多的网页,网络爬虫如何才能尽可能的遍历所有网页呢?如果您对大数据开发感兴趣,想系统地学习大数据,可以加入大数据技术学习交流群:458号345号782获取学习资源,将网页信息的抓取范围扩大到可能,这是网络爬虫系统面临的一个非常关键的问题。在网络爬虫系统中,抓取策略决定了抓取网页的顺序。
本节先简单介绍一下网络爬虫的爬取策略中用到的基本概念。
1)网页关系模型
从互联网的结构来看,网页通过不同数量的超链接相互连接,形成一个庞大而复杂的有向图,相互关联。
如图3所示,如果一个网页被视为图中的某个节点,而该网页中其他网页的链接被视为该节点到其他节点的边,那么我们可以很容易地认为整个网页Internet 上的页面被建模为有向图。
理论上,通过遍历算法遍历图,几乎可以访问互联网上的所有网页。
图 3 网页关系模型图
2)Web 分类
从爬虫的角度来划分互联网,互联网上的所有页面可以分为5个部分:已下载但未过期页面、已下载已过期页面、已下载页面、已知页面和未知页面,如图4. 显示。
抓取的本地网页实际上是互联网内容的镜像和备份。互联网是动态变化的。当互联网上的部分内容发生变化时,抓取到的本地网页就会失效。因此,下载的网页分为两种:下载的未过期网页和下载的过期网页。
图 4 网页分类
待下载的网页是指在URL队列中待抓取的页面。
可以看出,网页指的是未被抓取的网页,也不在待抓取的URL队列中,但可以通过分析抓取的页面或要抓取的URL对应的页面获取已抓取。
还有一些网页是网络爬虫无法直接抓取下载的,称为不可知网页。
以下重点介绍几种常见的抓取策略。
1.通用网络爬虫
通用网络爬虫也称为全网爬虫。爬取对象从一些*敏*感*词*网址扩展到整个Web,主要是门户搜索引擎和大型Web服务提供商采集data。
为了提高工作效率,一般的网络爬虫都会采用一定的爬取策略。常用的爬取策略包括深度优先策略和广度优先策略。
1)深度优先策略
深度优先策略意味着网络爬虫会从起始页开始,逐个跟踪链接,直到无法再深入。
网络爬虫在完成一个爬行分支后返回上一个链接节点,进一步搜索其他链接。当所有链接都遍历完后,爬取任务结束。
此策略更适合垂直搜索或站点搜索,但在抓取页面内容更深层次的站点时会造成资源的巨大浪费。
以图3为例,遍历的路径为1→2→5→6→3→7→4→8。
在深度优先策略中,当搜索到某个节点时,该节点的子节点和子节点的后继节点都优先于该节点的兄弟节点。深度优先策略是在搜索空间的时候,会尽可能的深入,只有在找不到一个节点的后继节点时才考虑它的兄弟节点。
这样的策略决定了深度优先策略可能无法找到最优解,甚至由于深度的限制而无法找到解。
如果没有限制,它会沿着一条路径无限扩展,从而“陷入”海量数据。一般情况下,使用深度优先策略会选择一个合适的深度,然后反复搜索直到找到一个解,这样就降低了搜索的效率。因此,当搜索数据量较小时,一般采用深度优先策略。
2)广度优先策略
广度优先策略根据网页内容目录的深度抓取网页。首先抓取较浅目录级别的页面。当同一级别的页面被爬取时,爬虫会进入下一层继续爬取。
仍以图3为例,遍历路径为1→2→3→4→5→6→7→8
因为广度优先策略是在第N层节点扩展完成后进入第N+1层,所以可以保证找到路径最短的解。
该策略可以有效控制页面的爬取深度,避免遇到无限深分支无法结束爬取的问题,实现方便,无需存储大量中间节点。缺点是爬到目录需要很长时间。更深的页面。
如果搜索过程中分支过多,即节点的后继节点过多,算法会耗尽资源,在可用空间中找不到解。
2.专注于网络爬虫
焦点网络爬虫,也称为主题网络爬虫,是指有选择地抓取与预定义主题相关的页面的网络爬虫。
1)基于内容评价的爬取策略
DeBra 将文本相似度的计算方法引入到网络爬虫中,并提出了 Fish Search 算法。
算法以用户输入的查询词为主题,将收录查询词的页面视为主题相关页面。它的局限性在于它无法评估页面与主题的相关性。
Herseovic 改进了 Fish Search 算法,提出了 Shark Search 算法,该算法使用空间向量模型来计算页面与主题的相关性。
使用基于连续值计算链接值的方法,不仅可以计算出哪些抓取的链接与主题相关,还可以量化相关性的大小。
2)基于链接结构评估的爬行策略
网页不同于一般文本。它是一个收录大量结构化信息的半结构化文档。
网页不是单独存在的。页面上的链接表示页面之间的相互关系。基于链接结构的搜索策略模型利用这些结构特征来评估页面和链接的重要性来确定搜索顺序。其中,PageRank算法是这类搜索策略模型的代表。
PageRank 算法的基本原理是,如果一个网页被多次引用,它可能是一个非常重要的网页。如果一个网页没有被多次引用,但被一个重要的网页引用,那么它也可能是一个重要的网页。一个网页的重要性均匀地传递给它所引用的网页。
将某个页面的PageRank除以该页面上存在的前向链接,并将得到的值与前向链接指向的页面的PageRank相加,得到被链接页面的PageRank .
如图 5 所示,PageRank 值为 100 的网页将其重要性平均转移到它引用的两个页面上,每个页面得到 50。同样,PageRank 值为 9 的网页引用它为 3 个页面中的每个页面传递的值是 3。
PageRank 值为 53 的页面的值来自引用它的两个页面传递的值。
,
图 5 PageRank 算法示例
3) 基于强化学习的爬行策略
Rennie 和 McCallum 将增强学习引入聚焦爬虫,使用贝叶斯分类器根据整个网页文本和链接文本对超链接进行分类,并计算每个链接的重要性,从而确定链接访问的顺序。
4)基于上下文映射的爬行策略
Diligenti 等人。提出了一种爬行策略,通过建立上下文映射来学习网页之间的相关性。该策略可以训练一个机器学习系统,通过该系统可以计算当前页面和相关网页之间的距离。最先访问最近页面中的链接。
3.增量网络爬虫
增量网络爬虫是指对下载的网页进行增量更新,只抓取新生成或更改的网页的爬虫。可以在一定程度上保证抓取到的页面尽可能的新鲜。
增量网络爬虫有两个目标:
为了实现第一个目标,增量网络爬虫需要重新访问网页以更新本地页面集中页面的内容。常用的方法有统一更新法、个体更新法和基于分类的更新法。
为了实现第二个目标,增量网络爬虫需要对网页的重要性进行排名。常见的策略包括广度优先策略、PageRank 优先策略等。
4. 深网爬虫
网页按存在方式可分为表面网页和深层网页。
深网爬虫架构包括6个基本功能模块(爬虫控制器、解析器、表单分析器、表单处理器、响应分析器、LVS控制器)和两个爬虫内部数据结构(URL列表和LVS)表。
其中,LVS(LabelValueSet)表示标签和值的集合,用于表示填写表单的数据源。在爬虫过程中,最重要的部分是表单填写,包括基于领域知识的表单填写和基于网页结构分析的表单填写。