深入浅析带你理解网络爬虫

这篇具有很好参考价值的文章主要介绍了深入浅析带你理解网络爬虫。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.引言

二.网络爬虫产生的背景

三.爬虫背后的相关技术和原理

1.插入URL的概念解析

2.常见的几种URL格式

四.网络爬虫的分类

1.通用网络爬虫

2.聚焦网络爬虫

3.增量式网络爬虫

4.Deep Web爬虫


一.引言

网络爬虫是一种自动获取网页内容的程序或技术。它就像一只“小蜘蛛”,在互联网上爬行,抓取各种信息。
 
想象一下,网络就像一张大网,上面有无数的网页,而爬虫就是在这张网上穿梭的“小虫子”。它可以根据预设的规则和目标,自动访问大量的网页,并提取出有用的数据。
 
爬虫的工作原理通常是通过发送请求给服务器,获取网页的源代码,然后解析这些源代码,找到需要的信息。这些信息可以是文本、图片、链接、表格等等。爬虫可以将这些信息存储下来,以便后续的分析和处理。
 
网络爬虫有很多用途。比如,搜索引擎需要使用爬虫来索引网页,以便用户可以搜索到相关的内容。数据分析师可以使用爬虫来收集数据,进行市场研究、竞品分析等

二.网络爬虫产生的背景

随着网络的迅速发展,万维网成为大量信息的载体,如何有效地提取并利用这些信息成为一个巨大的挑战。搜索引擎(Search Engine),例如传统的通用搜索引擎AltaVista,Yahoo!和Google等,作为一个辅助人们检索信息的工具成为用户访问万维网的入口和指南。但是,这些通用性搜索引擎也存在着一定的局限性,如:

  • (1)不同领域、不同背景的用户往往具有不同的检索目的和需求,通过搜索引擎所返回的结果包含大量用户不关心的网页。
  • (2)通用搜索引擎的目标是尽可能大的网络覆盖率,有限的搜索引擎服务器资源与无限的网络数据资源之间的矛盾将进一步加深。
  • (3)万维网数据形式的丰富和网络技术的不断发展,图片、数据库、音频、视频多媒体等不同数据大量出现,通用搜索引擎往往对这些信息含量密集且具有一定结构的数据无能为力,不能很好地发现和获取。
  • (4)通用搜索引擎大多提供基于关键字的检索,难以支持根据语义信息提出的查询。

网络爬虫

为了解决上述问题,定向抓取相关网页资源的聚焦爬虫应运而生。聚焦爬虫是一个自动下载网页的程序,它根据既定的抓取目标,有选择的访问万维网上的网页与相关的链接,获取所需要的信息。与通用爬虫(general purpose web crawler)不同,聚焦爬虫并不追求大的覆盖,而将目标定为抓取与某一特定主题内容相关的网页,为面向主题的用户查询准备数据资源。

三.爬虫背后的相关技术和原理

网络爬虫是一个自动提取网页的程序,它为搜索引擎从万维网上下载网页,是搜索引擎的重要组成。传统爬虫从一个或若干初始网页的URL开始,获得初始网页上的URL,在抓取网页的过程中,不断从当前页面上抽取新的URL放入队列,直到满足系统的一定停止条件。聚焦爬虫的工作流程较为复杂,需要根据一定的网页分析算法过滤与主题无关的链接,保留有用的链接并将其放入等待抓取的URL队列。然后,它将根据一定的搜索策略从队列中选择下一步要抓取的网页URL,并重复上述过程,直到达到系统的某一条件时停止。另外,所有被爬虫抓取的网页将会被系统存储,进行一定的分析、过滤,并建立索引,以便之后的查询和检索;对于聚焦爬虫来说,这一过程所得到的分析结果还可能对以后的抓取过程给出反馈和指导。

  • (1)对抓取目标的描述或定义;
  • (2)对网页或数据的分析与过滤;
  • (3)对URL的搜索策略。

1.插入URL的概念解析

URL 是“Uniform Resource Locator”的缩写,中文叫“统一资源定位符”。它就像是互联网世界的地址,用来定位和访问各种资源。

一个 URL 通常由几个部分组成,例如“https://www.example.com/page.html”。其中,“https”是协议部分,指定了使用的网络协议(这里是 HTTPS,一种安全的 HTTP 协议);“www.example.com”是域名,它对应着互联网上的一个服务器;“page.html”是资源路径,指定了要访问的具体文件或页面。
 
通过输入或点击 URL,我们的浏览器就知道要去哪里获取我们想要的资源,比如网页、图片、音频、视频等等。所以,URL 是互联网中非常重要的一部分,它使得我们能够方便地找到和访问各种信息

2.常见的几种URL格式

- http://:这是最常见的 URL 格式,用于访问通过 HTTP(超文本传输协议)传输的资源。例如:“http://www.example.com/”。
- https://:这是一种安全的 URL 格式,使用了 HTTPS(安全的 HTTP)协议来进行加密传输。例如:“https://www.secured-site.com/”。
- ftp://:用于访问通过 FTP(文件传输协议)传输的文件。例如:“ftp://ftp.example.org/”。
- mailto://:用于创建一个电子邮件链接。例如:“mailto:info@example.com”。
- tel://:用于创建一个电话号码链接。例如:“tel:+123-456-7890”。
- ssh://:用于访问通过 SSH(安全外壳协议)连接的远程服务器。例如:“ssh://user@server.example/”。
- irc://:用于访问 IRC(互联网中继聊天)频道。例如:“irc://irc.example.net/#channel”。
- magnet://:用于磁力链接,通常用于下载torrent 文件。例如:“magnet:?xt=urn:btih:1234567890”。

四.网络爬虫的分类

网络爬虫按照系统结构和实现技术,分为以下几种类型:通用网络爬虫(General Purpose Web Crawler)、聚焦网络爬虫(Focused Web Crawler)、增量式网络爬虫(Incremental Web Crawler)、深层网络爬虫(Deep Web Crawler)。实际的网络爬虫系统通常是几种爬虫技术相结合实现的。

1.通用网络爬虫

通用网络爬虫又称全网爬虫(Scalable Web Crawler),爬行对象从一些种子URL扩充到整个Web,主要为门户站点搜索引擎和大型Web服务提供商采集数据。由于商业原因,它们的技术细节很少公布出来。这类网络爬虫的爬行范围和数量巨大,对于爬行速度和存储空间要求较高,对于爬行页面的顺序要求相对较低,同时由于待刷新的页面太多,通常采用并行工作方式,但需要较长时间才能刷新一次页面。虽然存在一定缺陷,通用网络爬虫适用于为搜索引擎搜索广泛的主题,有较强的应用价值。

通用网络爬虫的结构大致可以分为页面爬行模块、页面分析模块、链接过滤模块、页面数据库、URL队列、初始URL集合几个部分。为提高工作效率,通用网络爬虫会采取一定的爬行策略。常用的爬行策略有:深度优先策略、广度优先策略。

  • (1)深度优先策略:其基本方法是按照深度由低到高的顺序,依次访问下一级网页链接,直到不能再深入为止。爬虫在完成一个爬行分支后返回到上一链接节点进一步搜索其它链接。当所有链接遍历完后,爬行任务结束。这种策略比较适合垂直搜索或站内搜索,但爬行页面内容层次较深的站点时会造成资源的巨大浪费。
  • (2)广度优先策略:此策略按照网页内容目录层次深浅来爬行页面,处于较浅目录层次的页面首先被爬行。当同一层次中的页面爬行完毕后,爬虫再深入下一层继续爬行。这种策略能够有效控制页面的爬行深度,避免遇到一个无穷深层分支时无法结束爬行的问题,实现方便,无需存储大量中间节点,不足之处在于需较长时间才能爬行到目录层次较深的页面。

2.聚焦网络爬虫

聚焦网络爬虫(Focused Crawler),又称主题网络爬虫(Topical Crawler),是指选择性地爬行那些与预先定义好的主题相关页面的网络爬虫。和通用网络爬虫相比,聚焦爬虫只需要爬行与主题相关的页面,极大地节省了硬件和网络资源,保存的页面也由于数量少而更新快,还可以很好地满足一些特定人群对特定领域信息的需求。

聚焦网络爬虫和通用网络爬虫相比,增加了链接评价模块以及内容评价模块。聚焦爬虫爬行策略实现的关键是评价页面内容和链接的重要性,不同的方法计算出的重要性不同,由此导致链接的访问顺序也不同。

  • (1)基于内容评价的爬行策略:DeBra将文本相似度的计算方法引入到网络爬虫中,提出了Fish Search算法,它将用户输入的查询词作为主题,包含查询词的页面被视为与主题相关,其局限性在于无法评价页面与主题相关度的高低。Herseovic对 Fish Search算法进行了改进,提出了Sharksearch算法,利用空间向量模型计算页面与主题的相关度大小。
  • (2)基于链接结构评价的爬行策略:Web页面作为一种半结构化文档,包含很多结构信息,可用来评价链接重要性。PageRank算法最初用于搜索引擎信息检索中对查询结果进行排序,也可用于评价链接重要性,具体做法就是每次选择PageRank值较大页面中的链接来访问。另一个利用Web结构评价链接价值的方法是HITS方法,它通过计算每个已访问页面的Authority权重和Hub权重,并以此决定链接的访问顺序。
  • (3)基于增强学习的爬行策略:Rennie和McCallum将增强学习引入聚焦爬虫,利用贝叶斯分类器,根据整个网页文本和链接文本对超链接进行分类,为每个链接计算出重要性,从而决定链接的访问顺序。
  • (4)基于语境图的爬行策略:Diligenti等人提出了一种通过建立语境图(Context Graphs)学习网页之间的相关度,训练一个机器学习系统,通过该系统可计算当前页面到相关Web页面的距离,距离越近的页面中的链接优先访问。印度理工大学(IIT)和IBM研究中心的研究人员开发了一个典型的聚焦网络爬虫。该爬虫对主题的定义既不是采用关键词也不是加权矢量,而是一组具有相同主题的网页。它包含两个重要模块:一个是分类器,用来计算所爬行的页面与主题的相关度,确定是否与主题相关;另一个是净化器,用来识别通过较少链接连接到大量相关页面的中心页面。

3.增量式网络爬虫

增量式网络爬虫(Incremental Web Crawler)是指对已下载网页采取增量式更新和只爬行新产生的或者已经发生变化网页的爬虫,它能够在一定程度上保证所爬行的页面是尽可能新的页面。和周期性爬行和刷新页面的网络爬虫相比,增量式爬虫只会在需要的时候爬行新产生或发生更新的页面,并不重新下载没有发生变化的页面,可有效减少数据下载量,及时更新已爬行的网页,减小时间和空间上的耗费,但是增加了爬行算法的复杂度和实现难度。增量式网络爬虫的体系结构[包含爬行模块、排序模块、更新模块、本地页面集、待爬行URL集以及本地页面URL集]。

增量式爬虫有两个目标:保持本地页面集中存储的页面为最新页面和提高本地页面集中页面的质量。为实现第一个目标,增量式爬虫需要通过重新访问网页来更新本地页面集中页面内容,常用的方法有:

  • (1)统一更新法
  • :爬虫以相同的频率访问所有网页,不考虑网页的改变频率;
  • (2)个体更新法
  • :爬虫根据个体网页的改变频率来重新访问各页面;
  • (3)基于分类的更新法
  • :爬虫根据网页改变频率将其分为更新较快网页子集和更新较慢网页子集两类,然后以不同的频率访问这两类网页。

为实现第二个目标,增量式爬虫需要对网页的重要性排序,常用的策略有:广度优先策略、PageRank优先策略等。IBM开发的WebFountain是一个功能强大的增量式网络爬虫,它采用一个优化模型控制爬行过程,并没有对页面变化过程做任何统计假设,而是采用一种自适应的方法根据先前爬行周期里爬行结果和网页实际变化速度对页面更新频率进行调整。北京大学的天网增量爬行系统旨在爬行国内Web,将网页分为变化网页和新网页两类,分别采用不同爬行策略。为缓解对大量网页变化历史维护导致的性能瓶颈,它根据网页变化时间局部性规律,在短时期内直接爬行多次变化的网页,为尽快获取新网页,它利用索引型网页跟踪新出现网页。

4.Deep Web爬虫

Web页面按存在方式可以分为表层网页(Surface Web)和深层网页(Deep Web,也称Invisible Web Pages 或Hidden Web)。表层网页是指传统搜索引擎可以索引的页面,以超链接可以到达的静态网页为主构成的Web页面。Deep Web是那些大部分内容不能通过静态链接获取的、隐藏在搜索表单后的,只有用户提交一些关键词才能获得的Web页面。例如那些用户注册后内容才可见的网页就属于Deep Web。2000年Bright Planet指出:Deep Web中可访问信息容量是Surface Web的几百倍,是互联网上最大、发展最快的新型信息资源。

Deep Web爬虫体系结构包含六个基本功能模块(爬行控制器、解析器、表单分析器、表单处理器、响应分析器、LVS控制器)和两个爬虫内部数据结构(URL列表、LVS表)。其中LVS(Label Value Set)表示标签/数值集合,用来表示填充表单的数据源。

Deep Web爬虫爬行过程中最重要部分就是表单填写,包含两种类型:

(1)基于领域知识的表单填写:

此方法一般会维持一个本体库,通过语义分析来选取合适的关键词填写表单。Yiyao Lu等人提出一种获取Form表单信息的多注解方法,将数据表单按语义分配到各个组中,对每组从多方面注解,结合各种注解结果来预测一个最终的注解标签;郑冬冬等人利用一个预定义的领域本体知识库来识别Deep Web页面内容,同时利用一些来自Web站点导航模式来识别自动填写表单时所需进行的路径导航。

(2)基于网页结构分析的表单填写:

此方法一般无领域知识或仅有有限的领域知识,将网页表单表示成DOM树,从中提取表单各字段值。Desouky等人提出一种LEHW方法,该方法将HTML网页表示为DOM树形式,将表单区分为单属性表单和多属性表单,分别进行处理;孙彬等人提出一种基于XQuery的搜索系统,它能够模拟表单和特殊页面标记切换,把网页关键字切换信息描述为三元组单元,按照一定规则排除无效表单,将Web文档构造成DOM树,利用XQuery将文字属性映射到表单字段。

Raghavan等人提出的HIWE系统中,爬行管理器负责管理整个爬行过程,分析下载的页面,将包含表单的页面提交表单处理器处理,表单处理器先从页面中提取表单,从预先准备好的数据集中选择数据自动填充并提交表单,由爬行控制器下载相应的结果页面

深入浅析带你理解网络爬虫,爬虫文章来源地址https://www.toymoban.com/news/detail-856034.html

到了这里,关于深入浅析带你理解网络爬虫的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构】带你深入理解栈

    栈是一种特殊的线性表。其只允许在固定的一端进行插入和删除元素的操作,进行数据的插入和删除的一端称作 栈顶 ,另外一端称作 栈底 。 栈不支持随机访问 ,栈的数据元素遵循 后进先出 的原则,即 LIFO(Late In First Out)。 也许有人曾经听说过 压栈 和 入栈 的术语,以

    2024年02月03日
    浏览(43)
  • 一文带你深入理解probe函数

    驱动注册的probe函数 probe函数在设备驱动注册最后收尾工作,当设备的device 和其对应的driver 在总线上完成配对之后,系统就调用 platform设备的probe函数完成驱动注册最后工作。资源、 中断调用函数以及其他相关工作。下面是probe被调用的一些程序流程。 从driver_register看起:

    2024年02月13日
    浏览(70)
  • 带你深入理解HandlerThread 的使用场景和用法

    HandlerThread是Android中的一个线程类,它是Thread的子类,并且内部封装了Looper和Handler,提供了更方便的消息处理和线程操作。HandlerThread常用于需要在后台执行耗时任务,并与UI线程进行交互的场景。 使用HandlerThread可以实现以下功能和优势: 后台线程执行任务:HandlerThread在后台

    2024年02月07日
    浏览(42)
  • 带你深入理解Android 中 UI 的刷新机制

    Android中的UI刷新机制是指Android系统如何更新和绘制UI界面以响应用户的操作和数据变化。UI的刷新过程涉及到多个关键概念和组件,包括主线程、UI线程、消息循环、View树、View的测量和布局、绘制等。下面将详细解释Android中的UI刷新机制,并提供相应的代码示例。 主线程和

    2024年02月14日
    浏览(35)
  • C语言之指针篇【超详细讲解,带你层层深入理解指针】

    目录 一、关于指针 二、指针类型 1、整型指针的访问权限说明: 2、字符指针的访问权限说明: 3、指针的类型决定向前或向后一步走了多大距离 三、野指针相关知识 1、野指针的成因 ①指针未初始化 ②指针的越界访问 ③指针所指向的空间释放了 2、如何规避野指针 ①指针

    2024年02月02日
    浏览(39)
  • 听说你还不知道什么是 python?带你深入理解什么是 python

    各位朋友们,大家好。在之后的时间里,我将陆续为大家分享我在python学习过程中学习到的知识点,如果你也对python感兴趣的话,欢迎大家来订阅我的python专栏哦,如果大家觉得博主的文章写得不错的话,记得给博主点个赞支持一下哦! Python是一种面向对象、解释型的高级编

    2024年02月11日
    浏览(34)
  • 带你深入理解 Java成员变量,局部变量和静态变量的创建和回收时机

    Java中的成员变量、局部变量和静态变量具有不同的创建和回收时机。下面我将详细介绍它们的特点和生命周期。 成员变量(实例变量): 成员变量是定义在类中的变量,每个类的实例都会拥有自己的成员变量。它们的生命周期与对象的创建和销毁相对应。 创建时机:成员变

    2024年02月07日
    浏览(41)
  • 带你深入理解“栈”(c语言 c++和stl Stack三个版本的模拟实现)

    目录 一.栈的概念及结构 二.栈的实现(c语言版) 2.1静态增长的栈 2.2动态增长的栈 2.3动态栈的模拟实现    1.栈的初始化   2.入栈  3.出栈 4.获取栈顶元素 5.获取栈中有效数据个数 6.检查栈是否为空 7.栈的销毁 三.C++ 版本模拟实现栈  1.C++版本的源代码 四.c语言版本的源代码

    2024年02月08日
    浏览(45)
  • C语言指针(适合C语言进阶者):一道题带你深入理解数组与指针的关系

    🎈个人主页:JAMES别扣了 💕在校大学生一枚。对IT有着极其浓厚的兴趣 ✨系列专栏目前为C语言初阶、后续会更新c语言的学习方法以及c题目分享. 😍希望我的文章对大家有着不一样的帮助,欢迎大家关注我,我也会回关,大家一起交流一起互动,感谢大家的多多支持哈! 🎉

    2024年04月16日
    浏览(54)
  • 深入理解Linux网络——本机网络IO

    系列文章: 深入理解Linux网络——内核是如何接收到网络包的 深入理解Linux网络——内核与用户进程协作之同步阻塞方案(BIO) 深入理解Linux网络——内核与用户进程协作之多路复用方案(epoll) 深入理解Linux网络——内核是如何发送网络包的 深入理解Linux网络——本机网络

    2024年02月15日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包