网络爬虫【简介】

我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步

今天来讲一讲视图

一、网络爬虫的定义


网络爬虫(Web Crawler),又称为网络蜘蛛、网络机器人等,是一种按照一定规则自动抓取互联网信息的程序或脚本。它通过模拟浏览器的行为,发送HTTP请求获取网页内容,并从中提取有用信息。网络爬虫广泛应用于搜索引擎、大数据分析、学术研究等领域,是互联网信息采集的重要工具。


二、网络爬虫的类型


网络爬虫主要分为通用网络爬虫和定向网络爬虫两大类。


(一)通用网络爬虫


通用网络爬虫,又称全网爬虫,旨在从互联网上尽可能多地抓取网页信息,覆盖各种类型和主题的网站。其特点包括:

1. 覆盖范围广:不局限于特定领域,目标是构建全面的网页索引。

2. 遵循规则:通常遵循robots.txt协议,尊重网站的抓取规则。

3. 并行工作:由于数据量巨大,通常采用并行爬取的方式。

通用网络爬虫的实现原理主要包括以下几个模块:

• 初始URL集合:作为爬取的起点。

• URL队列:存储待爬取的网页链接。

• 页面爬行模块:通过HTTP请求获取网页内容。

• 页面分析模块:解析网页,提取其中的链接和内容。

• 页面数据库:存储爬取到的网页。

• 链接过滤模块:避免重复抓取相同的网页。

通用网络爬虫通常采用深度优先或广度优先的搜索策略。


(二)定向网络爬虫


定向网络爬虫,又称聚焦网络爬虫或主题网络爬虫,是有选择地抓取与特定主题相关的网页。其特点包括:

1. 目标明确:专注于特定领域或主题,如科技新闻、医学研究等。

2. 节省资源:由于目标明确,不需要遍历整个互联网,因此在存储和计算资源的消耗上相对较少。

定向网络爬虫的实现原理与通用网络爬虫类似,但增加了内容评价和链接评价模块。其核心在于通过特定的策略和算法选择要抓取的网页,通常会使用机器学习或自然语言处理技术来判断网页内容是否符合预定主题。


三、常见的搜索策略


网络爬虫在抓取网页时,通常会采用以下几种搜索策略:


(一)深度优先搜索(DFS)


深度优先搜索的基本方法是按照深度由低到高的顺序,依次访问下一级网页链接,直到不能再深入为止。爬虫在完成一个爬行分支后返回到上一链接节点,继续搜索其他链接。这种策略适合垂直搜索或站内搜索,但可能会导致资源浪费。


(二)广度优先搜索(BFS)


广度优先搜索按照网页内容目录层次深浅来爬行页面,优先抓取较浅层次的页面。当同一层次中的页面爬行完毕后,再深入下一层继续爬行。这种策略能够有效控制爬行深度,避免陷入无穷深层分支。


(三)最佳优先搜索(Best-First Search)


最佳优先搜索是一种基于启发式的搜索策略,它通过评估每个节点的重要性来决定下一步的抓取顺序。例如,可以基于页面与主题的相关性、链接质量等因素进行评估。这种方法能够更高效地抓取有价值的信息,尤其适用于定向网络爬虫。


开发者工具

在从事编程开发的人员,其实浏览器也是其必备的开发工具

在找到目标网页以后我们可以使用快捷键F12,也可以通过在网页右键选择检查或者用组合键ctrl+shift+I来打开开发者工具

开发者工具的界面共有9个标签页,分别是:Elements、Console、Sources、Network、Performance、Memory、Application、Security和Audits。

如果是用于爬虫分析的话,熟练掌握Elements和Network标签就能满足大部分的爬虫需求。

Elements标签

在Elements标签中允许从浏览器的角度看页面,也就是说可以看到Chrome渲染页面所需要的HTML、CSS和DOM(Document Object Model)对象,也可以编辑内容更改页面的显示效果。

Elements标签分成两个部分,其中区域1用于显示页面的HTML信息,当选中某一行的内容时,区域2会显示当前选中的css样式,并且允许对元素的css样式进行查看和编辑,computed显示当前选中的边距属性,边框属性,Event Listeners是整个网页事件触发的JavaScript

通过单击Event Listeners下的某个JavaScript会自动跳转到Sources标签,显示当前JavaScript的源码,这个功能可快速找到JavaScript代码所在的位置,对分析JavaScript起到快速定位作用。

Network标签

从network当中可以看到页面向服务器请求的信息,请求的大小,以及请求花费的时间

network标签主要包含五个区域:

1.功能区

• 记录开关:红色圆点表示是否开启网络日志记录,灰色为未开启,红色为已开启。

• 清除日志:清除当
前所有网络请求记录。

• 屏幕捕获:开启后会记录页面在不同时间下的快照。

• 过滤器开关:开启后可显示筛选区。

• 快速查找:用于快速查找特定请求。

• 显示设置:包括是否使用更大的区域显示请求记录、是否显示Overview等。

• 分组显示:勾选后可按表单名称对网络请求进行分组。

• 保留日志:勾选后,页面刷新不会清空之前的请求记录。

• 禁用缓存:当打开开发者工具时生效,页面资源不会存入缓存。

• 离线模式:用于测试离线状态下的页面表现。

• 网络限速:模拟不同网络条件,如弱网。


2.筛选区

• 提供多种预定义的筛选选项,如ALL(显示所有请求)、XHR(AJAX异步请求)、JS(JavaScript文件)、CSS(样式表文件)、Img(图片)、Media(媒体文件)、Font(字体文件)、Doc(HTML文档)、WS(WebSocket请求)等。

• 还可以输入自定义条件进行筛选。


3.时间轴区(Overview)

• 以时间轴的形式展示页面加载过程,包括DOMContentLoaded和load事件的触发时间。

• 可以通过滑动鼠标滚轮查看不同时间点的加载情况。


4.主显示区

• 显示所有网络请求的详细列表,包括以下列:

• Name:请求资源的名称。

• Status:HTTP状态码。

• Type:请求资源的MIME类型。

• Initiator:发起请求的对象或进程。

• Size:服务器返回的响应大小。

• Time:请求的总持续时间。

• Waterfall:各请求相关活动的直观分析图。

• 点击某个请求的名称,可以查看该请求的详细信息,包括Headers(请求头和响应头)、Preview(预览)、Response(响应内容)、Cookies(Cookie信息)、Timing(请求生命周期各阶段时间)等。


5.信息汇总区

• 显示当前页面加载的总请求数、数据传输量、加载时间等信息。

• 包括DOMContentLoaded和load事件的触发时间及其在时间轴上的标记。

Requests Table

5个区域中,Requests Table是核心部分,主要作用是记录每个请求信息。但每次网站出现刷新时,请求列表都会清空并记录最新的请求信息,如用户登录后发生304跳转,就会清空跳转之前的请求信息并捕捉跳转后的请求信息。对于每条请求信息,可以单击查看该请求的详细信息:

每条请求信息划分为以下5个标签。
● Headers:该请求的HTTP头信息。
● Preview:根据所选择的请求类型(JSON、图片、文本)显示相应的预览。
● Response:显示HTTP的Response信息。
● Cookies:显示HTTP的Request和Response过程中的Cookies信息。
● Timing:显示请求在整个生命周期中各部分花费的时间。

关于Headers的内容如下:
Headers 标签通常分为以下几个部分:


1.请求方法和URL

• Request Method:显示请求的HTTP方法(如GET、POST、PUT、DELETE等)。

• Request URL:显示请求的完整URL。

• Request HTTP Version:显示使用的HTTP版本(如HTTP/1.1、HTTP/2等)。


2.请求头(Request Headers)
请求头是由客户端发送给服务器的头信息,它包含了关于请求的元数据。常见的请求头包括:

• Accept:客户端可接受的响应内容类型(如`text/html`、`application/json`等)。

• Accept-Encoding:客户端可接受的内容编码方式(如`gzip`、`deflate`等)。

• Accept-Language:客户端偏好的语言(如`zh-CN`)。

• Authorization:用于身份验证的凭据(如Basic Auth、Bearer Token等)。

• Content-Length:请求体的长度(仅在POST或PUT请求中出现)。

• Content-Type:请求体的内容类型(如`application/json`、`application/x-www-form-urlencoded`等)。

• Cookie:客户端存储的Cookie信息。

• Host:请求的主机名。

• Origin:发起请求的源(用于CORS跨域请求)。

• Referer:请求的来源页面。

• User-Agent:客户端的浏览器或设备信息。


3.响应头(Response Headers)
响应头是由服务器返回给客户端的头信息,它包含了关于响应的元数据。常见的响应头包括:

• Access-Control-Allow-Origin:允许访问资源的源(用于CORS跨域请求)。

• Cache-Control:缓存策略(如`no-cache`、`max-age`等)。

• Content-Encoding:响应体的内容编码方式(如`gzip`)。

• Content-Length:响应体的长度。

• Content-Type:响应体的内容类型(如`text/html`、`application/json`等)。

• Date:服务器生成响应的时间。

• ETag:资源的唯一标识符,用于缓存验证。

• Expires:响应过期时间。

• Last-Modified:资源最后修改时间。

• Location:重定向目标URL。

• Set-Cookie:服务器设置的Cookie信息。

• Server:服务器软件信息。


4.请求体(Request Payload)
对于POST或PUT请求,Headers 标签还会显示请求体的内容。这通常用于查看发送到服务器的数据,例如表单数据、JSON对象等。


5.查询参数(Query String Parameters)
如果请求URL中包含查询参数(如`?key=value`),Headers 标签会将这些参数列出,方便开发者查看。


---

Headers 标签的作用

1. 调试请求和响应:通过查看Headers,可以确认请求是否正确发送,以及服务器是否返回了预期的响应。

2. 优化性能:通过分析缓存头(如`Cache-Control`、`ETag`等),可以优化页面的缓存策略,减少重复请求。

3. 排查跨域问题:通过查看`Access-Control-Allow-Origin`等头信息,可以排查CORS跨域问题。

4. 验证身份认证:通过检查`Authorization`头,可以确认身份认证信息是否正确传递。

5. 分析内容编码:通过查看`Content-Encoding`和`Content-Type`,可以确认资源是否被正确压缩和解析。


---

示例
假设你发起一个GET请求,Headers标签可能显示如下内容:


请求方法和URL

GET /api/data HTTP/1.1

请求头

Host: example.com
Connection: keep-alive
Accept: application/json
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: sessionid=1234567890

响应头

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 256
Cache-Control: max-age=3600
Date: Sat, 15 Oct 2023 12:34:56 GMT
Set-Cookie: sessionid=9876543210; Path=/; HttpOnly

请求体(如果适用)
如果是一个POST请求,可能会显示:

Request Payload:
{"username": "user","password": "pass"
}

网站分析步骤:

分析网站的步骤如下:
步骤01 找出数据来源,大部分数据来源于Doc、XHR和JS标签。
步骤02 找到数据所在的请求,分析其请求链接、请求方式和请求参数。
步骤03 查找并确定请求参数来源。有时候某些请求参数是通过另外的请求生成的,比如请求A的参数id是通过请求B所生成的,那么要获取请求A的数据,就要先获取请求B的数据作为A的请求参数。

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

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

相关文章

​AI时代到来,对电商来说是效率跃升,还是温水煮青蛙

​凌晨三点的义乌商贸城,95后创业者小王,静静地盯着屏幕上的AI工具,竟露出了笑容。这个月他的跨境玩具店销量提升了不少,从之前的状态翻了3倍;而且团队人数有所变化,从5人缩减到了2人(其中包括他…

PDF文件密码保护破解:安全解密的步骤与技巧

PDF文件加密后,需要特定的密码才能访问内容。以下是一些常见的方法来解密PDF文件: 方法一:使用Adobe Acrobat 如果你有Adobe Acrobat Pro,可以使用它来解密PDF文件。 打开Adobe Acrobat Pro: 启动Adobe Acrobat Pro…

qt 自带虚拟键盘的编译使用记录

一、windows 下编译 使用vs 命令窗口,分别执行: qmake CONFIG"lang-en_GB lang-zh_CN" nmake nmake install 如果事先没有 指定需要使用的输入法语言就进行过编译,则需要先 执行 nmake distclean 清理后执行 qmake 才能生效。 …

Java开发之数据库应用:记一次医疗系统数据库迁移引发的异常:从MySQL到PostgreSQL的“dual“表陷阱与突围之路

记一次医疗系统数据库迁移引发的异常:从MySQL到PostgreSQL的"dual"表陷阱与突围之路 一、惊魂时刻:数据库切换引发的系统雪崩 某医疗影像系统在进行国产化改造过程中,将原MySQL数据库迁移至PostgreSQL。迁移完成后,系…

C++刷题(二):栈 + 队列

📝前言说明: 本专栏主要记录本人的基础算法学习以及刷题记录,使用语言为C。 每道题我会给出LeetCode上的题号(如果有题号),题目,以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…

精通游戏测试笔记(持续更新)

第一章、游戏测试的两条规则 不要恐慌 不要将这次发布当作最后一次发布 不要相信任何人 把每次发布当作最后一次发布 第二章:成为一名游戏测试工程师

Windows功能之FTP服务器搭建

一、创作背景 之前有用linux系统搭建过ftp服务器,最近想着用windows系统也顺便搭建一个,看网上有第三方服务软件一键部署,记得windows可以不借助第三方软件就可以搭建,就想顺便操作试试,结果老是连接不上,费…

星型组网模块的两种交互方式优缺点解析

星型组网模块简介 星型组网模块工作在433MHz频段;星型组网模块集主机(协调器)、终端为一体,星型组网模块具有长距离、高速率两种传输模式,一个主机(协调器)支持多达200个节点与其通讯&#xff0…

二分+前缀和——森林的最大美丽值

森林的最大美丽值(二分差分数组) 题目分析 求最小值的最大值,联想到二分。 第一阶段二段性分析 对于所有树的高度都可以大于等于mid,那么我们可以确定高度小于mid的值一定也可以,但是此时我需要找的是最大的高度,那么mid一定比…

Pytorch实现之最小二乘梯度归一化设计

简介 简介:LSGAN提出了一种利用最小二乘法来计算两个数据分布之间的距离,该论文在此基础上采用梯度归一化来进一步稳定训练。 论文题目:LSN-GAN: A Novel Least Square Gradient Normalization for Generative Adversarial Networks(LSN-GAN:一种新的生成对抗网络的最小…

JavaScript基础-全局作用域

在JavaScript编程中,理解变量的作用域是编写高效、可维护代码的关键之一。全局作用域是指变量在整个程序范围内都可访问的状态,这意味着它们可以在任何函数或代码块中被读取和修改。然而,过度使用全局变量也可能导致一些问题,如命…

【2025.3.13】记一次双系统笔记本加装固态硬盘记录 linux扩容 linux更换/home和/opt所在硬盘 windows无法调整亮度

文章目录 🌕事情经过🌕更换/home和/opt的挂载硬盘🌙目的🌙初始化1t固态硬盘🌙打开Linux查看硬盘信息🌙给新1t固态硬盘分区🌙格式化分区🌙把新1t固态硬盘先挂载到/mnt/ssd_1t 用于后续…

山东省新一代信息技术创新应用大赛-计算机网络管理赛项(样题)

目录 竞赛试题 网络拓扑 配置需求 虚拟局域网 IPv4地址部署 OSPF及路由部署 配置合适的静态路由组网 MSTP及VRRP链路聚合部署 IPSEC部署 路由选路部署 设备与网络管理部署 1.R1 2.R2 3.S1 4.S2 5.S3 竞赛试题 本竞赛使用HCL(华三云实验室)来进行网络设备选择…

【测试语言基础篇】Python基础之List列表

一、Python 列表(List) 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。 Python有6个序列的内置类型,但最常见的是列表和元组。序列都可…

大数据面试之路 (二) hive小文件合并优化方法

大量小文件容易在文件存储端造成瓶颈,影响处理效率。对此,您可以通过合并Map和Reduce的结果文件来处理。 一、合并小文件的常见场景 写入时产生小文件:Reduce任务过多或数据量过小,导致每个任务输出一个小文件。 动态分区插入&…

MySQL 批量插入 vs 逐条插

MySQL 插入数据:批量插入 vs 逐条插入,哪个更快? 在 MySQL 中,插入数据有两种常见方式: 批量插入:一条 SQL 插入多条数据。逐条插入:每次插入一条数据。 这两种方式有什么区别?哪…

Docker基础命令说明

Docker基础操作命令众多,这些命令可以按如下方式进行分类: 镜像操作容器操作网络操作数据卷操作LOG查询 等方面进行分类。 一、镜像操作命令 docker images:用于列出本地系统中所有的 Docker 镜像。镜像就像是一个模板,它包含…

AI重构私域增长:从流量收割到终身价值运营的三阶跃迁

私域运营的AI进化论:内容即服务的三个阶段 随着企业微信生态的成熟,私域运营正经历从"流量收割"到"关系养成"的本质转变。在AIGC技术的推动下,2024年私域场景正式进入**"内容即服务"**的价值共创期&#xff1…

Linux date 命令使用指南

date 命令用于 显示或设置系统日期和时间&#xff0c;支持灵活的时间格式化和计算。以下是常用场景与详细示例&#xff1a; 一、基本用法 1. 显示当前日期和时间 <BASH> date # 输出&#xff1a;Thu Jun 13 14:25:36 CST 20242. 设置系统时间&#xff08;需root权限&am…

Maven的依赖管理

maven相关依赖的官网&#xff1a;https://mvnrepository.com/ pom.xml是项目依赖的配置文件 maven首先会去本地仓库下载相关依赖&#xff0c;如果没有&#xff0c;则会去私服下载&#xff0c;再没有&#xff0c;就去中央仓库或镜像下载。 自定义properties&#xff0c;可使用…