当前位置: 首页 > article >正文

网络爬虫【简介】

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

今天来讲一讲视图

一、网络爬虫的定义


网络爬虫(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的请求参数。

相关文章:

网络爬虫【简介】

我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲视图 一、网络爬虫的定义 网络爬虫(Web Crawler),又称为网络蜘蛛、网络机器人等,是一种按照一定规则自动抓取互联网信息的程序或脚本。它…...

JPA动态查询自定义排序规则

方法1&#xff1a;使用 CASE WHEN 语句排序 // 自定义排序逻辑 // 定义“离线”排在前&#xff0c;“在线”排在后 Expression<Object> caseExpression cb.selectCase().when(cb.equal(root.get("status"), "离线"), 0).when(cb.equal(root.get(…...

卫语句优化多层if else嵌套

一、卫语句的介绍 卫语句是一种编程实践&#xff0c;用于在函数或方法的开头快速处理不符合条件的情况&#xff0c;从而避免深层次的嵌套结构。它的核心思想是尽早返回&#xff0c;减少嵌套&#xff0c;使代码更加清晰易读。 二、卫语句的作用 提高可读性&#xff1a;卫语句将…...

2024华东师范大学计算机复试上机真题

2024华东师范大学计算机复试机试真题 2023华东师范大学计算机复试机试真题 2022华东师范大学计算机复试机试真题 2024华东师范大学计算机复试上机真题 2023华东师范大学计算机复试上机真题 2022华东师范大学计算机复试上机真题 在线评测&#xff1a;传动门&#xff1a;pgcode…...

3.15刷题

P6337 [COCI 2007/2008 #2] CRNE - 洛谷 #include<bits/stdc.h> using namespace std; int main(){int n;cin>>n;//横加竖 最大。n/2,n/21if(n%20){cout<<(n/21)*(n/21);}else cout<<(n/22)*(n/21);return 0; }P6338 [COCI 2007/2008 #2] PRVA - 洛…...

14.使用各种读写包操作 Excel 文件:辅助模块

一 各种读写包 这些是 pandas 在底层使用的各种读写包。无须安装 pandas&#xff0c;直接使用这些读写包就能够读写 Excel 工作簿。可以尽可能地使用 pandas 来解决这类问题&#xff0c;只在 pandas 没有提供你所需要的功能时才用到读写包。 表中没有 xlwings &#xff0c;因为…...

设计心得——多态

一、设计上的多态 无论是在网上还是书籍上&#xff0c;还是自己的文章里都反复分析过多态的原理、应用和各种常见的情况。本篇重点从设计的角度来阐述一下多态&#xff0c;而不对多态的具体的用法进行说明。在前面的知识学习中可以知道&#xff0c;多态可以分为动多态和靜多态…...

【DeepSeek】本地部署DeepSeek的完整教程(Ollama+Docker+Open WebUI)

本地部署DeepSeek的完整教程 文章目录 本地部署DeepSeek的完整教程写在前面技术需求详细步骤一. 安装Ollama软件二. 安装DeepSeek-R1模型三. 安装Docker软件四. 配置Web UI界面问题解决1. 打开`docker desktop`时,一直显示`Docker Engine stopped`2. 用`Docker`拉取`Open WebU…...

Python数据分析之数据可视化

Python 数据分析重点知识点 本系列不同其他的知识点讲解&#xff0c;力求通过例子让新同学学习用法&#xff0c;帮助老同学快速回忆知识点 可视化系列&#xff1a; Python基础数据分析工具数据处理与分析数据可视化机器学习基础 四、数据可视化 图表类型与选择 根据数据特…...

1、操作系统引论

一、操作系统 会使用linux系统 建议大家先学会linux的基础指令&#xff0c;可以看菜鸟教程网站进行学习。 1、各种定义 操作系统定义 管理计算机的 硬件 和软件资源&#xff0c; 能对各类作业进行调度&#xff0c;方便用户使用计算机的程序集合。操作系统运行在内核态&#xf…...

DeepSeek 本地化新篇章:Ollama 兼容 OpenAI API 的深度解析与部署实践

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着大语言模型(LLM)的快速发展,开发者对本地化部署和 API 兼容性的需求日益增加。Ollama 作为一个轻量级开源框架,通过兼容 OpenAI AP…...

【PTA题目解答】7-4 数气球 (20分)

1.题目 天空上有n个气球&#xff0c;第i个气球的颜色为colori​&#xff08;为全由小写字母组成的字符串&#xff09; 请你数出每种颜色的气球的数量&#xff0c;并按照颜色出现的先后顺序进行排序输出。 输入格式: 测试数据有T组(1≤T≤100)。 对于每组样例&#xff0c;第一…...

Swift 中 associatedtype 的用法详解

目录 前言 1.什么是associatedtype 2.associatedtype 的作用 1.让协议支持泛型 2.让协议支持不同的数据类型 3.结合 where 关键字限制类型 4.什么时候使用 associatedtype 5.总结 前言 在 Swift 语言中&#xff0c;泛型&#xff08;Generics&#xff09;是一个非常强大…...

java泛型通配符?及上下界(extends,super)保证安全性、灵活性、可读性

在 Java 中&#xff0c;泛型通配符&#xff08;?&#xff09;用于表示未知类型&#xff0c;通常用于增强泛型的灵活性。通配符可以与上下限结合使用&#xff0c;以限制泛型的范围。以下是通配符及上下限的使用示例&#xff1a; 1. 无界通配符 (?) 无界通配符表示可以接受任意…...

HarmonyOS NEXT - 网络请求问题(http)

HTTP&#xff08;HyperText Transfer Protocal&#xff0c;超文本传输协议&#xff09;是一种用于传输超媒体文档&#xff08;如HTML&#xff09;的应用层协议&#xff0c;它是客户端和服务器之间通信的基础&#xff1b;无论是获取数据、提交表单、上传文件&#xff0c;HTTP都扮…...

告别旧版本,功能全面升级!

小伙伴们&#xff0c;今天来给大家唠唠一款超经典的软件——格式工厂&#xff01;相信很多人都不陌生吧&#xff1f;它可是早期超多人用的视频格式转换工具呢&#xff01;但随着软件行业的发展&#xff0c;它慢慢被其他工具代替了&#xff0c;像万兴、小丸、AME这些新宠儿一出现…...

WSL2 Ubuntu安装GCC不同版本

WSL2 Ubuntu安装GCC不同版本 介绍安装gcc 7.1方法 1&#xff1a;通过源码编译安装 GCC 7.1步骤 1&#xff1a;安装编译依赖步骤 2&#xff1a;下载 GCC 7.1 源码步骤 3&#xff1a;配置和编译步骤 4&#xff1a;配置环境变量步骤 5&#xff1a;验证安装 方法 2&#xff1a;通过…...

双目视觉小记

双目视觉及其数学原理 1. 双目视觉概述 双目视觉&#xff08;Stereo Vision&#xff09;是一种模仿人眼视觉系统的计算机视觉技术&#xff0c;利用两台摄像机从不同角度拍摄同一场景&#xff0c;通过图像处理和三维重建来获取场景的深度信息。双目视觉广泛应用于机器人、自动…...

Obsidian Copilot:打造你的专属 AI 笔记助手

Obsidian Copilot作为一款非常受欢迎的Obsidian插件&#xff0c;不仅极大地提升了用户的笔记管理和信息检索效率&#xff0c;还通过其多样化的AI功能为用户带来了前所未有的便捷体验。本文将详细介绍Obsidian Copilot的核心特点、使用方法及个人体验分享。 核心特点 Obsidian…...

VPC4-通达oa-docker逃逸-shiro反序列化-hash传递-CrackMapExec喷射-历史ptt攻击-进程注入

由于本人是菜鸡&#xff0c;不会免杀&#xff0c;所有免杀的部分就直接跳过了 &#xff08;hhh) 靶场地址&#xff1a; 链接: https://pan.baidu.com/s/1Fh1Zg79n1yjCPe6rrQ2apA 提取码: qiag 第一台ubuntu(docker逃逸&#xff0c;shiro反序列化&#xff09; fscan扫到一…...

稳定运行的以Oracle数据库为数据源和目标的ETL性能变差时提高性能方法和步骤

要提高以 Oracle 为数据源和目标的ETL性能&#xff0c;需要综合考虑数据库性能优化、ETL工具配置、查询优化、并行处理和资源管理等多个方面。优化过程中要根据具体的ETL场景和工具来选择适合的方案&#xff0c;同时建议进行逐步调优&#xff0c;测试不同方案的效果&#xff0c…...

C++类与对象——拷贝构造与运算符重载

拷贝构造函数和赋值运算符重载就是C类默认六个函数之二。 拷贝构造函数&#xff1a; 如果⼀个构造函数的第⼀个参数是自身类类型的引用&#xff0c;且任何额外的参数都有默认值&#xff0c;则此构造函数 也叫做拷贝构造函数&#xff0c;也就是说拷贝构造是⼀个特殊的构造函数…...

疗养院管理系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装疗养院管理系统软件来发挥其高效地信息处理的作用&#xf…...

2024年12月CCF-GESP编程能力等级认证C++编程四级真题解析

四级真题的难度: 一、总体难度评价 CCF-GESP编程能力等级认证C++四级真题的难度通常被认为相对较高。它不仅要求考生具备扎实的C++编程基础,还需要考生掌握一定的算法和数据结构知识,以及良好的问题解决能力。 二、具体难度分析 ‌理论知识考察‌: 单选题和判断题中,会涉…...

MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.1 MySQL简介与应用场景

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 文章大纲 MySQL开发陷阱与最佳实践&#xff1a;第1章&#xff1a;MySQL开发基础概述-1.1 MySQL简介与应用场景1.1.1 MySQL的发展历程与市场地位1.1.2 MySQL的核心特性与技术优势1.1.2…...

使用GitHub Actions实现Git推送自动部署到服务器

将网站一键部署到服务器的方案很多&#xff0c;比如纯Shell脚本结合SSH、Jenkins等工具。本文将介绍如何利用GitHub Actions这一免费且轻量的CI/CD工具&#xff0c;实现代码推送后自动部署到云服务器。 之前一直在使用github的工作流&#xff0c;确实是一个比较好用的工具。 我…...

PyTorch 系列教程:探索自然语言处理应用

本文旨在介绍如何使用PyTorch进行自然语言处理&#xff08;NLP&#xff09;的基础知识&#xff0c;包括必要的库、概念以及实际代码示例。通过阅读本文&#xff0c;您将能够开始您的NLP之旅。 1. 理解PyTorch PyTorch是一个开源的机器学习库&#xff0c;基于Torch库&#xff0…...

3.14-1列表

列表 一.列表的介绍和定义 1 .列表 类型: <class list> 2.符号:[] 3.定义列表: 方式1:[] 通过[] 来定义 list[1,2,3,4,6] print(type(list)) #<class list> 方式2: 通过list 转换 str2"12345" print(type(str2)) #<class str> list2lis…...

什么是强哈希算法pbkdf2(Password-Based Key Derivation Function)

文章目录 什么是pbkdf2使用场景 在线工具 什么是pbkdf2 维基百科&#xff1a;https://zh.wikipedia.org/zh-cn/PBKDF2 PBKDF2&#xff08;Password-Based Key Derivation Function 2&#xff09;是一种基于密码的密钥派生函数。它的主要作用是从密码和盐&#xff08;salt&…...

<meta content=“no-siteapp“ data-n-head=“ssr“ http-equiv=“Cache-Control“/>什么作用?

<meta content"no-siteapp" data-n-head"ssr" http-equiv"Cache-Control"/> 这个标签的作用是禁止某些浏览器或工具将网页转换为“应用”形式&#xff0c;尤其是针对一些特定的浏览器&#xff08;如早期的 UC 浏览器&#xff09;或移动端工…...