基于Python语言开发的网络爬虫原理和工作流程进行分析
优采云 发布时间: 2021-03-23 22:25基于Python语言开发的网络爬虫原理和工作流程进行分析
网络数据采集是指通过网络采集器或网站公共API从网站获得数据信息。此方法可以从网页中提取非结构化数据,将其存储为统一的本地数据文件,然后以结构化方式进行存储。它支持采集个文件或附件,例如图片,音频,视频等,并且附件和文本可以自动关联。
在互联网时代,网络爬虫主要为搜索引擎提供最全面,最新的数据。
在大数据时代,网络爬虫是更有利于从Internet提取采集数据的工具。已经有数百种已知的Web爬网工具,并且Web爬网工具基本上可以分为三类。
分布式Web采集器工具,例如Nutch。 Java Web采集器工具,例如Crawler4j,WebMagic,WebCollector。非Java网络采集器工具,例如Scrapy(基于Python语言开发)。
本节首先简要介绍Web爬网程序的原理和工作流程,然后讨论Web爬网程序的爬网策略,最后介绍典型的Web工具。 Web爬网程序的原理Web爬网程序是根据某些规则自动对Web信息进行爬网的程序或脚本。
网络采集器可以自动采集他们可以访问的所有页面内容,从而为搜索引擎和大数据分析提供数据源。在功能方面,采集器通常具有三个功能:数据采集,处理和存储,如图1所示。
图1 Web采集器的*敏*感*词*
除了供用户阅读的文本信息外,该网页还收录一些超链接信息。
Web爬网程序系统通过网页中的超链接信息连续获取Internet上的其他网页。 Web采集器从一个或几个初始网页的URL开始,并在初始网页上获取URL。在抓取网页的过程中,它会不断从当前页面提取新的URL,并将它们放入队列中,直到满足系统的特定停止条件为止。
网络采集器系统通常会选择一些更重要的网站 URL,这些URL具有较高的输出程度(网页中超链接的数量)作为*敏*感*词*URL集合。
Web爬网程序系统使用这些*敏*感*词*集合作为初始URL来开始数据爬网。由于该网页收录链接信息,因此将通过现有网页的URL获得一些新的URL。
可以将网页之间的指向结构视为一个森林,每个*敏*感*词*URL对应的网页是该森林中一棵树的根节点,从而使Web爬虫系统可以根据广度优先搜索进行搜索。算法或深度优先搜索算法遍历所有网页。
由于深度优先搜索算法可能会导致采集器系统陷入网站内部,因此不利于在更接近网站主页的网页上搜索信息,因此宽度优先搜索算法采集通常使用网页。
Web爬网程序系统首先将*敏*感*词*URL放入下载队列中,然后简单地从团队负责人那里获取URL,以下载相应的网页,获取网页的内容并将其存储,然后解析链接信息在网页中获取一些新网址。
其次,根据某种网络分析算法过滤掉与主题无关的链接,保留有用的链接,并将其放在URL队列中等待抓取。
最后,取出一个URL,下载其相应的网页,然后对其进行解析,然后重复该过程,直到它遍历整个网络或满足某些条件为止。 Web爬网程序的工作流程如图2所示。Web爬网程序的基本工作流程如下。
1)首先选择*敏*感*词*网址的一部分。
2)将这些URL放入要抓取的URL队列中。
3)从要爬网的URL队列中取出要爬网的URL,解析DNS以获取主机的IP地址,然后下载与该URL对应的网页并将其存储在下载的Web中页面库。另外,将这些URL放入爬网的URL队列中。
4)分析爬网的URL队列中的URL,分析其中的其他URL,然后将这些URL放入要爬网的URL队列,从而进入下一个周期。
图2 Web爬网程序的基本工作流程。 Web采集器的搜寻策略。诸如Google和百度等一般搜索引擎抓取的网页数量通常以1亿为单位进行计算。那么,面对如此多的网页,网络爬虫如何才能尽可能地遍历所有网页,从而尽可能地扩大网页信息的覆盖范围?这是Web采集器系统面临的一个非常关键的问题。在Web采集器系统中,搜寻策略决定了搜寻网页的顺序。
本节首先简要介绍Web爬网程序的爬网策略中使用的基本概念。 1)网页之间的关系模型从Internet结构的角度来看,网页通过不等数量的超链接相互连接,从而形成了一个相互关联的大而复杂的有向图。
如图3所示,如果一个网页被视为图中的某个节点,并且链接到该网页中其他网页的链接被视为该节点到其他节点的边缘,那么我们可以很容易地将整个网页在互联网上被建模为有向图。
理论上,通过遍历算法遍历图形,您可以访问Internet上几乎所有的网页。
图3网页关系模型图2)网页分类从爬虫的角度划分了Internet。互联网上的所有页面都可以分为5个部分:下载和未到期的网页,下载和到期的网页以及要下载的网页,已知网页和未知网页,如图4所示。
爬行的本地网页实际上是Internet内容的镜像和备份。互联网正在动态变化。当Internet上的一部分内容更改时,爬网的本地网页将过期。因此,下载的网页分为两种:下载的未到期网页和下载的到期网页。
图4网页分类要下载的网页是指要抓取的URL队列中的那些页面。
可以看出,网页是指尚未爬网的网页,也不是要爬网的URL队列中的网页,但是可以通过分析爬网的页面或与要爬网的URL对应的页面来获得。爬行。
还有一些网页爬网程序无法直接爬网和下载的网页,称为不可知网页。
以下内容重点介绍了几种常见的爬网策略。 1.通用网络采集器通用网络采集器也称为全网络采集器。爬网对象从某些*敏*感*词*URL扩展到整个Web,主要是门户网站搜索引擎和大型Web服务提供商采集数据。
为了提高工作效率,一般的网络爬虫将采用某些爬虫策略。常用的爬网策略包括深度优先策略和广度优先策略。
1)深度优先策略
深度优先策略意味着网络爬虫将从起始页面开始,并逐个跟踪链接,直到不再深入为止。
Web采集器在完成搜寻分支后将返回上一个链接节点,以进一步搜索其他链接。遍历所有链接后,爬网任务结束。
此策略更适合于垂直搜索或网站搜索,但是在爬取具有更高页面内容级别的网站时,会造成大量资源浪费。
以图3为例,遍历的路径为1→2→5→6→3→7→4→8。
在深度优先策略中,当搜索某个节点时,该节点的子节点和该子节点的后继节点都优先于该节点的同级节点。深度优先的策略是:搜索空间时,它将尽可能深入,并且仅在找不到节点的后继节点时才考虑其同级节点。
这种策略确定深度优先策略可能无法找到最佳解决方案,甚至由于深度的限制而无法找到解决方案。
如果没有限制,它将沿路径无限期扩展,这将“捕获”到大量数据中。在正常情况下,使用深度优先策略会选择合适的深度,然后重复搜索直到找到解决方案为止,因此降低了搜索效率。因此,当搜索数据量较小时,通常采用深度优先策略。
2)广度优先策略
广度优先策略根据网页内容目录的深度对网页进行爬网。首先对较浅目录级别的页面进行爬网。对同一级别的页面进行爬网时,爬网程序将进入下一个级别以继续爬网。
以图3为例,遍历的路径为1→2→3→4→5→6→7→8
因为广度优先策略是在第N层的节点扩展完成后进入第N + 1层,所以可以保证找到路径最短的解决方案。
该策略可以有效地控制页面的爬网深度,避免遇到无限深分支时无法结束爬网的问题,实现方便,无需存储大量中间节点。缺点是爬网到目录需要很长时间。更深的页面。
如果在搜索过程中分支过多,即该节点的后继节点过多,则该算法将耗尽资源,并且在可用空间中找不到解决方案。 2.集中式Web爬虫集中式Web爬虫,也称为主题网络爬虫,是指选择性地爬取与预定义主题相关的页面的Web爬虫。
1)基于内容评估的抓取策略
DeBra将文字相似度的计算方法引入了Web采集器,并提出了FishSearch算法。
该算法将用户输入的查询词作为主题,并将收录该查询词的页面视为主题相关页面。它的局限性在于它无法评估页面与主题的相关性。
Herseovic对FishSearch算法进行了改进,并提出了SharkSearch算法,该算法使用空间矢量模型来计算页面与主题之间的相关性。
使用基于连续值的链接值计算方法,不仅可以计算出与主题相关的已爬网链接,还可以计算出相关性的量化幅度。
2)基于链接结构评估的抓取策略
网页与常规文字不同。这是一个半结构化文档,收录大量结构化信息。
网页并不单独存在。页面上的链接指示页面之间的相互关系。基于链接结构的搜索策略模型使用这些结构特征来评估页面和链接的重要性,以确定搜索顺序。其中,PageRank算法就是这种搜索策略模型的代表。
PageRank算法的基本原理是,如果一个网页被多次引用,则它可能是一个非常重要的网页。如果一个网页没有被多次引用,而是被一个重要的网页引用,那么它也可能是一个重要的网页。网页的重要性会均匀地传递到它所引用的网页。
用该页面上存在的前向链接将页面的PageRank分开,并将获得的值添加到前向链接所指向的页面的PageRank中,然后获得链接页面的PageRank。
如图5所示,PageRank值为100的网页将其重要性平均传递给它所引用的两个页面,每个页面获得50,而PageRank值为9的网页也被其引用。 3页中每页传递的值为3。
PageRank值为53的页面的值是从引用该页面的两个页面传递的值中得出的。
图5 PageRank算法示例
3)基于强化学习的爬行策略
Rennie和McCallum将增强型学习引入了重点爬虫中,使用贝叶斯分类器根据整个网页文本和链接文本对超链接进行分类,并计算每个链接的重要性,从而确定链接访问的顺序。
4)基于上下文地图的抓取策略
Diligenti等。提出了一种爬网策略,该爬网策略通过建立上下文映射来学习网页之间的相关性。这种策略可以训练机器学习系统,通过该系统可以计算出当前页面到相关网页的距离。优先访问最近页面中的链接。 3.增量Web爬网程序增量Web爬网程序是指对下载的网页进行增量更新并且仅对新生成或更改的网页进行爬网的爬网程序。可以在一定程度上确保已爬网的页面是“使页面尽可能新”。
渐进式网络爬虫有两个目标:
将本地页面中存储的页面保留为最新页面。提高本地页面集中页面的质量。
<p>要实现第一个目标,增量Web爬网程序需要重新访问该网页以更新本地页面集中的页面内容。常用的方法有统一更新方法,个体更新方法和基于分类的更新方法。在统一更新法中,无论网页更改的频率如何,网络爬虫都以相同的频率访问所有网页。在个别更新方法中,网络爬虫会根据个别网页更改的频率重新访问每个页面。在基于分类的更新方法中,网络爬虫根据网页更改的频率将网页分为更新速度较快的网页子集和更新速度较慢的网页子集,然后以不同的频率访问这两种类型的网页。