通用爬虫的概念简述

一、🌈什么是通用爬虫

通用爬虫(General Purpose Web Crawler或Scalable Web Crawler)是一种网络爬虫,其设计目标是对整个互联网或尽可能广泛的网络空间进行数据抓取。通用爬虫主要用于搜索引擎构建其庞大的网页索引数据库,从互联网中自动爬取、下载网页内容,形成网页的海量集合,以便后续对这些数据进行索引、存储和搜索。
在这里插入图片描述

通用网络爬虫是搜索引擎抓取系统(Baidu、Google、Yahoo等)重要组成部分。主要目的是将互联网上的网页下载到本地,形成一个互联网内容的镜像备份。

通用搜索引擎(Search Engine)工作原理

通用网络爬虫从互联网中搜集网页,采集信息,这些网页信息用于为搜索引擎建立索引从而提供支持,它决定着整个引擎系统的内容是否丰富,信息是否即时,因此其性能的优劣直接影响着搜索引擎的效果。


二、🌈特点

  1. 全面性:起始点通常是少数几个种子URL,然后通过跟踪网页上的超链接逐渐扩展到整个互联网。
  2. 大规模:能够处理数以亿计的网页,并持续不断地更新和增加新的网页数据。
  3. 高效性:采用高效的爬取策略,例如广度优先搜索、深度优先搜索或是更复杂的启发式算法,以最合理的方式遍历互联网。
  4. 自我更新:定期重新抓取网页以更新索引内容,对于高权重或频繁更新的网站可能会更频繁地抓取。
  5. 策略调整:根据网站的robots.txt协议以及爬虫道德规范,控制抓取速度和频率,避免给网站服务器带来过大压力。
  6. 分布式架构:由于要处理的数据量极其庞大,往往采用分布式计算架构,实现多线程或多机并行爬取。

搜索引擎网络爬虫的基本工作流程如下:

  1. 首先选取一部分的种子URL,将这些URL放入待抓取URl队列;
  2. 取出待抓取URL,解析DNS得到主机IP,并将URL对应的网页下载下来,存储进已下载网页中,并将这些URL放进抓取URL队列
  3. 分析已抓取URL队列中的URL,分析其中的其他URL,并且将URL放入待抓取URL队列,从而进入下一个循环……

搜索引擎如何获取一个新网站的URL:

  1. 新网站向搜索引擎主动提交网址:(如百度http://zhanzhang.baidu.com/linksubmit/url)
  2. 在其他网站上设置新网站外链(尽可能处于搜索引擎爬虫爬取范围)
  3. 搜索引擎和DNS解析服务商(如:DNSpod等)合作,新网站域名将被迅速抓取。

在这里插入图片描述


三、🌈步骤

  1. 定义抓取目标与范围

    • 明确爬虫的目的,即需要从哪些网站或什么样的网页中获取什么类型的数据。
    • 设定抓取的深度限制,比如是否仅抓取特定层级的链接,还是全网爬取。
  2. 制定抓取策略

    • 确定爬虫的起始URL列表,也就是所谓的“种子”URL。
    • 制定URL发现规则,比如通过HTML中的<a>标签提取链接,或者根据网站的结构决定抓取路径。
    • 设定抓取频率、延迟以及其他策略,以遵守网站的robots.txt协议和尊重网站服务器的资源。
  3. 发送HTTP请求

    • 使用HTTP客户端库(如Python的Requests库)向目标URL发送GET或POST请求。
    • 根据需要配置请求头,模拟浏览器行为,包括User-Agent、Cookies、Referer等,以降低被目标网站识别为爬虫的风险。
    • 可能还需要使用代理IP或其他手段来绕过访问限制。
  4. 接收和解析响应

    • 接收服务器返回的HTTP响应,获取网页内容。
    • 使用HTML或XML解析器(如BeautifulSoup、lxml、PyQuery或基于DOM的解析方式)解析网页结构。
    • 对于非HTML内容,可能需要相应的内容解析方法,如JSON、XML等。
  5. 提取数据

    • 根据预先设定好的规则,从网页内容中提取有用数据,例如文本、图片、链接或者其他特定元素。
    • 可能需要用到CSS选择器、XPath或其他模式匹配技术。
  6. URL管理与调度

    • 将解析得到的新URL添加到URL队列中,等待爬取。
    • 实现URL去重,避免爬取已访问过的网页。
    • 根据策略从队列中取出URL进行下一步抓取。
  7. 数据存储

    • 将爬取的数据储存到本地文件、数据库或者云端存储服务。
    • 数据可能需要清洗、转换或结构化以便后续分析和使用。
  8. 监控与终止条件

    • 设置适当的爬虫运行监控,包括错误处理、性能监控及资源占用情况。
    • 定义停止抓取的条件,比如达到预定抓取数量、抓取时间限制、磁盘空间不足等。
  9. 循环迭代

    • 持续从URL队列中获取新的URL进行抓取,直至满足停止条件。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/797967.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FineReport安装后,启动报错:get tomcat thread pool info error

报错信息如下&#xff0c;一堆堆的错误&#xff1a; 1、get tomcat thread pool info error 2、lineofficial plugin is not istalled 3、line...not installed 4、lark... 5、dingtalk ... 最后解决方案&#xff1a; 1、安装java jdk1.8 2、安装了tomcat 8 安装版 3、…

MBTI测试深度解析:从性格类型看职业选择与发展方向!(包含开源免费的API接口)

MBTI简介 迈尔斯-布里格斯类型指标&#xff08;Myers–Briggs Type Indicator&#xff0c;MBTI&#xff09;是由美国作家伊莎贝尔布里格斯迈尔斯和她的母亲凯瑟琳库克布里格斯共同制定的一种人格类型理论模型。 该指标以瑞士心理学家卡尔荣格划分的8种心理类型为基础&#xff…

使用LIMIT进行分页

SELECT employee_id, first_name, salary FROM employees LIMIT 0, 5; 0为偏移量&#xff0c; 5为条目数 每页pageSize条记录&#xff0c;显示第page页 LIMIT (page - 1) * pageSize, pageSize; # 或者 LIMIT pageSize OFFSET (page - 1) * pageSize;

备战蓝桥杯---递归与DFS刷题2

1. 数据范围允许直接暴力把所有组合都写一遍&#xff0c;我们用Pair来存&#xff0c;在sort中分式比较只要把自己的分子与对方的分母乘比较即可&#xff0c;下面介绍一下st树的写法&#xff0c;具体原理就不说了&#xff0c;它是先[0/1,1/1]然后取分子分母的平均化成两个区间&a…

web学习笔记(五十三)身份认证

目录 1.Web 开发模式 1.1 服务端渲染的 Web 开发模式 1.2 服务端渲染的优缺点 1.3 前后端分离的 Web 开发模式 1.4 如何选择 Web 开发模式 2. 身份认证 2.1 Session 认证机制 3. 在 Express 中使用 Session 认证 3.1 安装express-session 中间件 3.2 配置 express-ses…

electron 打不同环境的包

我用的打包工具: electron-builder 1、在package.json 文件的同级下创建2个js文件 electron-builder-test.config.js electron-builder.config.js electron-builder-test.config.js const basejson require(./electron-builder.config.js); module.exports {extraMetada…

智能变电站协议系列-5、IEC 104协议细化解读(IEC 60870以及如何获取对应国标和行标)

一、前言 通过之前整体性的协议分析&#xff0c;目前确定先基于IEC104做深入分析&#xff0c;来结合分析电网常见的业务&#xff0c;以此从协议侧关联深入到业务侧。在国内该标准也应用比较稳定和广泛了&#xff0c;所以研究104协议相关资料也会更全一些。 二、资料及标准收集…

【强化学习的数学原理-赵世钰】课程笔记(二)贝尔曼公式

【强化学习的数学原理-赵世钰】课程笔记&#xff08;二&#xff09;贝尔曼公式 一. 内容概述 1. 第二章主要有两个内容 &#xff08;1&#xff09;一个核心概念&#xff1a;状态值&#xff08;state value&#xff09;&#xff1a;从一个状态出发&#xff0c;沿着一个策略我…

OWASP TOP10 漏洞详解

前言 该内容是 OWASP TOP 10 的学习笔记&#xff0c;笔记内容来源 B 站龙哥的视频【12.Top漏洞10&#xff1a;服务器请求伪造_哔哩哔哩_bilibili】 一、访问控制崩溃 概念 未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据&#xf…

QA测试开发工程师面试题满分问答9: Python中内存管理的概念、原理、使用

概念原理 Python中的内存管理是由解释器自动处理的&#xff0c;它使用引用计数和垃圾回收机制来管理内存。以下是Python内存管理的一些关键概念、设计原理和最佳实践&#xff0c;以帮助您高效使用和管理内存&#xff1a; 引用计数&#xff1a;Python使用引用计数来追踪对象的引…

Shell学习 - 2.25 Shell $[]:对整数进行数学运算

和 (())、let 命令类似&#xff0c;$[] 也只能进行整数运算。 Shell $[] 的用法如下&#xff1a; $[表达式] $[] 会对表达式进行计算&#xff0c;并取得计算结果。如果表达式中包含了变量&#xff0c;那么你可以加$&#xff0c;也可以不加。 Shell $[] 举例&#xff1a; [c.bia…

delphi 中注册表的操作

例&#xff1a;列出注册表"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run"中的所有键值到界面上或文本中&#xff1b;并把自己做的这个程序设置为开机启动。(写到前面那个注册表路径上就生效了) unit Unit1;interfaceusesWindows, Messages, Sys…

基于JAVA+SSM+微信小程序+MySql的图书捐赠管理系统设计与实现(前后端分类)

一、项目背景介绍&#xff1a; 在当今社会&#xff0c;图书捐赠是一种普遍而有益的行为&#xff0c;旨在促进阅读、教育和知识传播。图书捐赠可以帮助改善教育资源不足的地区、学校和社区的阅读环境&#xff0c;提供更多的学习机会和知识获取途径。随着互联网和移动技术的发展&…

安卓APP的开发:为了安全的设计

安卓APP的开发:为了安全的设计 安卓默认是为了安全和隐私而设计的.隐私方面的设计聚焦于最小化. 最小化权限请求,最小化位置读取,还有最小化跨APP的数据可见性. 为了安全的设计,遵循如下的最佳实践:加密,完整性和授权. 保护用户隐私 最小化权限请求 请求你的APP功能需要的最…

Linux初学(十六)NFS文件共享

一、NFS 1.1 简介 NFS&#xff08;Network File System&#xff0c;网络文件系统&#xff09;是一种分布式文件系统协议&#xff0c;允许不同的计算机之间通过网络共享文件和目录。 NFS类似于类似于Windows文件共享 将Linux的一个目录共享到网络中&#xff0c;网络中的其他所有…

Redis-更新策略,缓存穿透,缓存雪崩,缓存击穿

Redis-更新策略,缓存穿透,缓存雪崩,缓存击穿 1.缓存更新 策略 淘汰策略超时剔除主动更新 更新策略&#xff1a;先修改数据库还是先删除缓存 结论&#xff1a;先修改数据库&#xff0c;因为缓存的操作比较快&#xff0c;容易产生数据不一致更新缓存还是删除缓存&#xff1f; …

google tool:protobuf(持续更新)

protobuf是google推出的一个非常好用的工具, protobuf version diff 在不同protobuf的版本间会有细微的不同。 在2.4.0及更早版本中,生成的C++代码会将枚举类型的值放在全局命名空间中,而不是将枚举附属于具体的枚举类型作用域之下。这种情况下,枚举值通过ENUMTYPE_ENUMV…

网络协议——HTTP协议

目录 ​编辑 一&#xff0c;HTTP协议基本认识 二&#xff0c;认识URL 三&#xff0c;http协议的格式 1&#xff0c;发送格式 2&#xff0c;回应格式 四&#xff0c;服务端代码 五&#xff0c;http报文细节 1&#xff0c;Post与Get方法 2&#xff0c;Content_lenth 3&…

运维:Linux操作系统

一、Linux基础命令 1、ls命令 功能&#xff1a;列出文件夹信息 语法&#xff1a;ls [-l -h -a] [参数] 参数&#xff1a;被查看的文件夹&#xff0c;不提供参数&#xff0c;表示查看当前工作目录 -l&#xff0c;以列表形式查看 -h&#xff0c;配合-l&#xff0c;以更加人性…

【前端webpack5高级优化】提升打包构建速度几种优化方案

HotModuleReplacement&#xff08;HMR/热模块替换&#xff09; 开发时我们修改了其中一个模块代码&#xff0c;Webpack 默认会将所有模块全部重新打包编译&#xff0c;速度很慢 所以我们需要做到修改某个模块代码&#xff0c;就只有这个模块代码需要重新打包编译&#xff0c;…