网络爬虫【简介】

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

今天来讲一讲爬虫

一、网络爬虫的定义


网络爬虫(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.rhkb.cn/news/34271.html

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

相关文章

数字隔离器,如何提升储能系统的安全与效能?

随着全球对光伏、风电等可再生能源需求的持续增长,在全球能源转型的浪潮中,储能技术凭借着可平衡能源供需、提高能源利用效率等优势,已成为实现 “双碳” 目标的核心支撑。据国家能源局公布数据显示,截至2024年底,我国…

AI玩Flappy Bird || 基于Q-Learning和DQN的机器学习

一、游戏介绍 Flappy Bird 游戏需要玩家控制一只小鸟越过管道障碍物。玩家只可以进行“跳跃”或者“不操作”两种操作,即点或不点。点则让小鸟上升一段距离,不点小鸟继续下降。若小鸟碰到障碍物或地面,则游戏失败。 本项目目的是开发一个深层…

【Linux内核系列】:文件系统收尾以及软硬链接详解

🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 世界上只有一种个人英雄主义,那么就是面对生活的种种失败却依然热爱着生活 内容回顾 那么在之前的学习中,我们…

【eNSP实战】三层交换机使用ACL实现网络安全

拓图 要求: vlan1可以访问Internetvlan2和vlan3不能访问Internet和vlan1vlan2和vlan3之间可以互相访问PC配置如图所示,这里不展示 LSW1接口vlan配置 vlan batch 10 20 30 # interface Vlanif1ip address 192.168.40.2 255.255.255.0 # interface Vla…

Trae与Builder模式初体验

说明 下载的国际版:https://www.trae.ai/ 建议 要选新模型 效果 还是挺不错的,遇到问题反馈一下,AI就帮忙解决了,真是动动嘴(打打字就行了),做些小的原型效果或演示Demo很方便呀&#xff…

Canoe Panel常用控件

文章目录 一、Panel 中控件分类1. 指示类控件2. 功能类控件3. 信号值交互类控件4. 其他类控件 二、控件使用方法1. Group Box 控件2. Input/Output Box控件3. Static Text控件4. Button控件5. Switch/Indicator 控件 提示:Button 和 Switch 的区别参考 一、Panel 中…

睡不着运动锻炼贴士

在快节奏的现代生活中,失眠似乎已成为许多人的“夜间伴侣”。夜晚辗转反侧,白天精神不振,这样的恶性循环让许多人苦不堪言。其实,除了调整作息和饮食习惯,适当的运动也是改善睡眠的一剂良药。今天,就让我们…

java数据结构(复杂度)

一.时间复杂度和空间复杂度 1.时间复杂度 衡量一个程序好坏的标准,除了能处理各种异常,还有就是时间效率,当然,对于一些配置好的电脑数据处理起来就是比配置低的高,但从后期发展来看,当数据量足够庞大时&…

NAT和NAPT的介绍

一、NAT的介绍以及作用 二、NAPT的介绍以及作用 三、NAT vs NAPT 一、NAT的介绍以及作用 1.1 NAT的介绍 NAT(Network Address Translation)是一种广泛应用于互联网的技术,主要用于解决IPv4地址耗尽问题,同时提供网络安全和网络…

VSCode通过SSH免密远程登录Windows服务器

系列 1.1 VSCode通过SSH远程登录Windows服务器 1.2 VSCode通过SSH免密远程登录Windows服务器 文章目录 系列1 准备工作2 本地电脑配置2.1 生成密钥2.2 VS Code配置密钥 3. 服务端配置3.1 配置SSH服务器sshd_config3.2 复制公钥3.3 配置权限(常见问题)3.…

大模型训练全流程深度解析

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。https://www.captainbed.cn/north 文章目录 1. 大模型训练概览1.1 训练流程总览1.2 关键技术指标 2. 数据准备2.1 数据收集与清洗2.2 数据…

export、export default 和 module.exports 深度解析

文章目录 1. 模块系统概述1.1 模块系统对比1.2 模块加载流程 2. ES Modules2.1 export 使用2.2 export default 使用2.3 混合使用 3. CommonJS3.1 module.exports 使用3.2 exports 使用 4. 对比分析4.1 语法对比4.2 使用场景 5. 互操作性5.1 ES Modules 中使用 CommonJS5.2 Com…

AI芯片设计

目的:未来的时代,一定会是AI的时代,那么,AI时代的三个重要组成部分,我要参与其中之一! 参考视频:AI芯片设计第一讲_哔哩哔哩_bilibili 端处理 云端

动手学深度学习:CNN和LeNet

前言 该篇文章记述从零如何实现CNN,以及LeNet对于之前数据集分类的提升效果。 从零实现卷积核 import torch def conv2d(X,k):h,wk.shapeYtorch.zeros((X.shape[0]-h1,X.shape[1]-w1))for i in range(Y.shape[0]):for j in range(Y.shape[1]):Y[i,j](X[i:ih,j:jw…

【开源代码解读】AI检索系统R1-Searcher通过强化学习RL激励大模型LLM的搜索能力

关于R1-Searcher的报告: 第一章:引言 - AI检索系统的技术演进与R1-Searcher的创新定位 1.1 信息检索技术的范式转移 在数字化时代爆发式增长的数据洪流中,信息检索系统正经历从传统关键词匹配到语义理解驱动的根本性变革。根据IDC的统计…

使用Node的http模块创建web服务,给客户端返回html页面时,css失效的根本原因(有助于理解http)

最近正在尝试使用node写后端,使用node创建http服务的时候,碰到了这样的一个问题: 这是我的源代码: import { createServer } from http import { join, dirname, extname } from path import { fileURLToPath } from url import…

JVM 2015/3/15

定义:Java Virtual Machine -java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写,到处运行 自动内存管理,垃圾回收 数组下标越界检测 多态 比较:jvm/jre/jdk 常见的JVM&…

IP风险度自检,互联网的安全“指南针”

IP地址就像我们的网络“身份证”,而IP风险度则是衡量这个“身份证”安全性的重要指标。它关乎着我们的隐私保护、账号安全以及网络体验,今天就让我们一起深入了解一下IP风险度。 什么是IP风险度 IP风险度是指一个IP地址可能暴露用户真实身份或被网络平台…

【鸿蒙】封装日志工具类 ohos.hilog打印日志

封装一个ohos.hilog打印日志 首先要了解hilog四大日志类型: info、debug、warm、error 方法中四个参数的作用 domain: number tag: string format: string ...args: any[ ] 实例: //普通的info日志,使用info方法来打印 //第一个参数 : 0x0…

走路碎步营养补充贴士

走路碎步,这种步伐不稳的现象,在日常生活中并不罕见,特别是对于一些老年人或身体较为虚弱的人来说,更是一种常见的行走状态。然而,这种现象可能不仅仅是肌肉或骨骼的问题,它还可能是身体在向我们发出营养缺…