爬虫基本原理
爬虫基本原理
- 1.1获取网页
- 1.1.1提取信息
- 1.1.2保存数据
- 1.2请求
- 1.2.1 请求方法
- 1.2.2 请求网址
- 1.2.3 请求头
- 1.2.4请求体
- 1.3响应
1.1获取网页
爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码。源代码里包含了网页的部分有用信息,所以只要把源代码获取下来,就可以从中提取想要的信息了。
1.1.1提取信息
获取网页源代码后,接下来就是分析网页源代码,从中提取我们想要的数据。
另外,由于网页的结构有一定的规则,所以还有一些根据网页节点属性、cSS 选择器或 XPath 来提取网页信息的库,如 Beautifulsoup、pyquery、lxml等。使用这些库,我们可以高效快速地从中提取网页信息,如节点的属性、文本值等。
提取信息是爬虫非常重要的部分,它可以使杂乱的数据变得条理清晰,以便我们后续处理和分析数据。
1.1.2保存数据
提取信息后,我们一般会将提取到的数据保存到某处以便后续使用。这里保存形式有多种多样,如可以简单保存为TXT文本或了SON文本,也可以保存到数据库,如 MysQL和 MongoDB等,也可保存至远程服务器,如借助 SFTP进行操作等。

- 向起始url发送请求,并获取响应
- 对响应进行提取
- 如果提取url,则继续发送请求获取响应
- 如果提取数据,则将数据进行保存
1.2请求
请求由客户端向服务端发出,可以分为四个内容:请求方法、请求的网址、请求头、请求体。
1.2.1 请求方法
GET:请求页面,并返回页面内容
HEAD:类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头
POST:大多用于提交表单或上传文件,数据包含在请求体中
PUT:从客户端向服务器传送的数据取代指定文档中的内容
DELETE:请求服务器删除指定的页面
CONNECT:把服务器当作跳板,让服务器代替客户端访问其他网页
OPTIONS:允许客户端查看服务器的性能
TRACE:回显服务器收到的请求,主要用于测试或诊断
1.2.2 请求网址
请求的网址,即统一资源定位符URL,它可以唯一确定我们想请求的资源。
https://www.baidu.com/s?wd=python
https表示协议
www.baidu.com表示域名
s表示路径
wd=python表示查询参数
1.2.3 请求头
右键页面,检查,网络,然后点XHR,刷新页面,然后点击“headers”,找到请求标头。

接下来解释每一行都代表什么:
:Authority::请求的目标服务器的主机名或IP地址,这里是api.bilibili.com。
:Method::HTTP请求方法。这里是GET,表示获取资源。
:Path::请求的路径。这里是/x/web-interface/cdn/report?from=report。
:Scheme::请求的协议方案。这里是https,表示使用HTTPS协议进行通信。
Accept::客户端可接受的响应内容类型。这里是*/*,表示接受任意类型的响应。
Accept-Encoding::客户端可接受的响应内容编码方式。这里是gzip, deflate, br,表示支持gzip、deflate和br(Brotli)压缩方式。
Accept-Language::客户端可接受的语言类型。这里是zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,表示首选中文(中国大陆), 其次中文, 最后英文(美国)。
Cache-Control::控制缓存行为的指令,这里是no-cache,表示不使用缓存。
Origin::指定请求的来源,这里是https://www.bilibili.com。
Pragma::与缓存相关的指令,这里是no-cache,表示不使用缓存。
Referer::指定请求的来源页面或链接地址,这里是https://www.bilibili.com/。
Sec-Ch-Ua::指定浏览器的User-Agent字符串,表示浏览器及其版本信息。
Sec-Ch-Ua-Mobile::指定浏览器是否是移动版。
Sec-Ch-Ua-Platform::指定浏览器运行的平台,这里是Windows。
Sec-Fetch-Dest::指定请求的资源类型,这里是empty,表示空资源。
Sec-Fetch-Mode::指定请求的模式,这里是cors,表示使用CORS(跨源资源共享)请求。
Sec-Fetch-Site::指定请求的站点类型,这里是same-site,表示同源站点。
User-Agent::浏览器或客户端的用户代理标识,用于标识客户端的软件和版本信息。这里是Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36,表示使用的是Windows操作系统下的Chrome浏览器。
1.2.4请求体
请求体一般承载的内容是POST请求中的表单数据,但是对于GET请求,请求体为空。
先找到请求方法为POST的页面:

然后在载荷中找到相应的表单数据:

表单数据代表了每次进行访问所需要带的请求参数。
如果是GET请求带了载荷的话,那都会在URL中进行体现,比如:


可以发现,Payload中的report参数在请求的URL中体现了出来。
1.3响应
响应的状态码在头部就可以看到,以下是相应状态码及其解释:
- 1xx(信息性状态码):表示请求已被接收,需要进一步处理。
100 Continue:服务器已接收到请求的起始部分,客户端应继续发送剩余的请求。
101 Switching Protocols:服务器将按照客户端请求的协议切换。 - 2xx(成功状态码):表示请求已成功处理并得到响应。
200 OK:请求成功,正常返回结果。
201 Created:请求成功,并在服务器上创建了新的资源。
204 No Content:请求成功,但响应中不包含实体的主体部分。 - 3xx(重定向状态码):表示需要进一步操作以完成请求。
301 Moved Permanently:请求的资源已永久移动到新位置。
302 Found:请求的资源临时移动到不同的位置。
304 Not Modified:客户端的缓存资源是最新的,不需要重新传输。 - 4xx(客户端错误状态码):表示请求包含错误或无法完成请求。
400 Bad Request:请求无效,服务器无法理解。
401 Unauthorized:请求需要身份验证。
403 Forbidden:服务器拒绝访问请求的资源。 - 5xx(服务器错误状态码):表示服务器无法完成请求。
500 Internal Server Error:服务器遇到了意外错误,无法完成请求。
502 Bad Gateway:作为代理或网关的服务器收到无效响应。
503 Service Unavailable:服务器暂时无法处理请求,通常是由于过载或维护。
相关文章:
爬虫基本原理
爬虫基本原理 1.1获取网页1.1.1提取信息1.1.2保存数据 1.2请求1.2.1 请求方法1.2.2 请求网址1.2.3 请求头1.2.4请求体1.3响应 1.1获取网页 爬虫首先要做的工作就是获取网页,这里就是获取网页的源代码。源代码里包含了网页的部分有用信息,所以只要把源代…...
常见电子元器件和电路
目录 常见电子元器件一览表(字母标志)NTC(负温度系数热敏电阻)压敏电阻X2电容(抑制电源电磁干扰用电容器)泄放电阻共模电压共模电感整流桥滤波电容RCD吸收二极管Y电容整流器的原理输出整流肖特基二极管 功率晶体管(GTR,三极管)双极型晶体管(BJTÿ…...
English Learning - L3 Lesson1 VOA-Color 译文
听碎 VOA NOW, THE VOA SPECIAL ENGLISH PROGRAM WORDS AND THEIR STORIES Every people has its own way of saying things, its own special expressions. Many everyday American expressions are based on colors. 各国人民都有自己说话的方式,有自己独特的表…...
如何在linux中配置JDK环境变量
在linux系统部署皕杰报表,因皕杰报表是一款纯java报表工具,运行时需要jre环境,所以要在服务器上配置三个jdk环境变量path、classpath、JAVA_HOME。 那么为什么要配置jdk环境变量呢?因为java软件运行时要用到一些java命令ÿ…...
横截面收益率(二) 阿尔法策略是如何构建的
资本资产定价模型自从首次被提出以来在金融经济学中一直处于中心地位。 在一系列简化假定条件下,资本资产定价模型表明,任何证券的收益率与该证券 的系统性风险(或者贝塔值)呈线性关系。因此,依据资本资产定价模型横截…...
【ConfluxNews】2023.5.15 警惕任何未经合约审计的项目
1.【网络状态】当前版本V2.2.3,全网算力≈8T,昨日交易次数20K,昨日新增账户0.17K,昨日新增合约0个; 2.【POS参数】总锁仓275M,节点总数284,年利率13.7%(理论计算)&#x…...
MySQL学习---17、MySQL8其它新特性
1、MySQL新增特性 1.1 更简便的NoSQL支持 NoSQL泛指非关系型数据库和数据存储。随着互联网平台的规模飞速发展,传统的关系型数据库已经越来越不能瞒住需求。从5.6版本开始,MySQL就开始支持简单的NoSQL存储功能。MySQL 8对这一功能做了优化,…...
快速入门matlab——变量练习
学习目标:1.掌握matlab编程中最常用的几种变量类型 2.对变量类型的属性有所熟悉,不要求记忆,知道了解即可 3.要求熟练运用这几种变量类型创建自己的变量 clear all; % 清除Workspace中的所有…...
c++ 11标准模板(STL) std::set(三)
定义于头文件 <set> template< class Key, class Compare std::less<Key>, class Allocator std::allocator<Key> > class set;(1)namespace pmr { template <class Key, class Compare std::less<Key>> using se…...
ChatGPT详细介绍
ChatGPT: 自然语言处理的强大工具 ChatGPT是一种基于人工智能的自然语言处理模型,它是由OpenAI开发的一款先进的语言模型。ChatGPT基于GPT-3.5架构,具有强大的语言生成和理解能力。它被设计用于与人类进行自然对话,并提供广泛的应用场景。 …...
【算法】【算法杂谈】让[0,x)区间上的出现概率变为x^k
目录 前言问题介绍解决方案代码编写java语言版本c语言版本c语言版本 思考感悟写在最后 前言 当前所有算法都使用测试用例运行过,但是不保证100%的测试用例,如果存在问题务必联系批评指正~ 在此感谢左大神让我对算法有了新的感悟认识! 问题介…...
【2023华为OD笔试必会25题--C语言版】《21 对称美学》——字符串、递归
本专栏收录了华为OD 2022 Q4和2023Q1笔试题目,100分类别中的出现频率最高(至少出现100次)的25道,每篇文章包括原始题目 和 我亲自编写并在Visual Studio中运行成功的C语言代码。 仅供参考、启发使用,切不可照搬、照抄,查重倒是可以过,但后面的技术面试还是会暴露的。✨✨…...
为减少来自环境使用的无线传感器网络的传输次数而开发的方法(Matlab代码实现)
目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨💻4 Matlab代码 💥1 概述 随着无线传感器网络(Wireless Sensor Network,WSN)的广泛应用,业界开始应用环境能量收集技术解决传感器节点的能量补充问题。而…...
springboot+vue滴答拍摄影项目(源码+文档)
风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的滴答拍摄影项目。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌…...
SQL基础培训13-索引和优化
进度13-索引和优化-SQL基础培训 知识点: 你可以把索引理解为一种特殊的目录。索引分聚集索引(clustered index,也称聚类索引、簇集索引) 和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。 1、聚集索引 以汉语字典举例,汉语字典有部首目录和检字表,还…...
拥抱5G发展机遇,从边缘计算上车
随着5G技术的逐渐普及和应用,边缘计算成为了当前信息技术领域的热门话题。边缘计算是指将计算和数据存储移动到网络的边缘,即源站以外的网络设备。与云计算相比,边缘计算更加贴近数据生成和处理的实时应用场景,具有更高的性能和更…...
“前端”工匠系列(二):合格的工匠,怎么做好价值落地 | 京东云技术团队
一、“技术鄙视链?” 如果你是一个技术人,相信都知道技术圈有个相互的鄙视链,这个链条从技术人自己认知的角度在以业务价值为中心嵌套的一层一层的环,就像洋葱,具体的描述这里不赘述了。 出门左拐随便抓住一个人问一…...
Oracle11g下载与安装
一、Oracle11g下载 官网下载地址:Oracle Database 11g Release 2 for Microsoft Windows (x64) 选择"Accept License Agreement",点击"win64_11gR2_database_1of2.zip"和"win64_11gR2_database_2of2.zip",进行…...
考研复试-软件工程
什么是软件工程?主要的方法?软件工程三要素?软件的生命周期?组成部分?软件过程的定义软件需求分析的任务软件开发过程的常见模型结构化设计方法,结构化分析方法软件测试的目的?分类?…...
软件测试选择题
下列选项中,哪一项不是软件开发模型(A) A、V模型 B、快速模型 C、螺旋模型 D、敏捷模型 下列选项中,哪一项不是影响软件质量的因素(C) A、需求模糊 B、缺乏规范的文档指导 C、使用新技术 D、开发人…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
