Python!从0开始学爬虫:(一)HTTP协议 及 请求与响应
前言
爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。
今天的HTTP协议,会有助于我们更好的了解网络。
一、什么是HTTP协议
(1)定义
HTTP(超文本传输协议,HyperText Transfer Protocol)是用于在网络上进行数据通信的协议,尤其是用于网页的传输。
简单来说,就是专门把超文本数据从网络上传输到本地浏览器上的一个协议
我们也经常见它,比如网站前面的前缀:
当然,上图有些不太正确,但 HTTPS 其实是HTTP的升级版,二者其实差不太多。
(2)HTTPS
那么HTTPS到底有什么不同呢?
HTTPS的全称是Hypertext Transfer Protocol Secure。相较于HTTP多了一个Secure
所以我们应该知道,哪里升级了。
简单来说,就是在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性
Tips:HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。(了解即可)
(3)URI和URL
还有些专业术语,诸如URI和URL :
- URI(统一资源标识符):用于标识资源的字符串。
- URL(统一资源定位符):一种特定类型的URI,用于定位资源并提供如何访问这些资源的信息。
- URN:统一资源名称
顾名思义,URI让我们可以唯一标识一个资源。URL则让我们可以去定位一个资源。
比如一个网址https://www.example.com
我们可以把这整个链接叫做URI,因为这个网址标识了一个资源。
而这个链接,也叫做URL,因为这个网址的链接也同样定位了一个资源。
那他们怎么区分呢?
URI包括了URL,因为URI=URL和URN。
比如,一本书的编号111,这个编号就是URN。
所以该编号也可以叫做URI,因为它同样标识了一个资源,但是它不能叫做URL了,因为该编号并没有定位这个资源,我们只知道它叫什么,却不知道去哪里可以找到他。
二、HTTP请求过程
(1)请求过程
我们在网页最上面的导航栏上输入网址,按下回车,然后出现一个新网页。
这个过程就是浏览器向某网站发送了一个请求,然后网站进行处理,最后网站回馈一个响应,浏览器解析后展现出来。
(2)相关名词介绍
(注:以下名词了解即可)
为了更好的说明该过程,我们可以鼠标右键用检查功能来具体显示一下请求和响应:
然后切换到Network面板,再刷新一下网页:
即可看到很多行的东西,每一行就代表一次 请求-响应 过程
我们仔细观察这个界面的各列:
其中,各列含义如下
- Name:请求界面的名称
- Status:响应状态码,通过状态码显示,可以判定响应是否正常。
- Type:请求文档的类型。
- Initiator:请求源,用来标记是哪个对象或进程发起的请求。
- Size:请求资源大小(如果是缓存中提取的资源,该列显示from cache)
- Time:从发起请求到获得响应所花总时间。
- Waterfall:网络请求可视化瀑布流。
- (有时会有Protocol:请求协议类型,http1.1代表HTTP1.1版本,h2代表HTTP2.0版本)
若单击某列,则会显示更详细的信息:
在General部分:
- Request URL :请求的URL
- Request Method:请求方法
- Status Code:响应状态码
- Remote Address:远程服务器的地址和端口
- Referre Policy:为判别策略
- Response Headers:响应头
- Request Headers:请求头
以上名词可能有些说的不太清楚,现在我们具体来看一看各部分,到底是干什么的
三、请求部分
请求,即Request。
由用户发往服务器的信息。包括四大部分:请求方法、请求网址、请求头、请求体。
(1)请求方法
请求方法,客户端请求服务器时的方式
常见的有两种:GET请求、POST请求
比如:
GET请求:
请求获取指定资源,如请求页面返回内容
当我们在浏览器最上面输入网址并按下回车,这就是发起了GET请求。
POST请求:
向指定资源提交数据,通常用于表单提交或者上传文件。
当我们登陆网站,输入账号密码后,点击提交后,这就是发起了POST请求。
那么二者有什么具体区别呢?
- GET请求的参数包括在URL,POST请求的数据包括在请求体中。
所以如果打开某网站某板块某界面的某图片后,这时我们会在上面的网址中看到该图片的路径,这就是GET请求该图片的参数 - GET请求提交数据最大1024字节,POST请求没有限制。
所以综上,当我们提交账号密码时,最好选择POST,否则GET会将密码显示在网址中暴露哦~
当然除此之外,还有很多请求,不过并不常用,汇总如下:
- GET:请求获取指定资源。GET 请求不应包含请求体,且一般用于获取数据。
- POST:向指定资源提交数据,通常用于表单提交或者上传文件。POST 请求可以包含请求体,用于传送数据。
- PUT:向指定资源上传数据,通常用于更新资源的状态。PUT 请求一般是幂等的,即多次相同的请求会得到相同的结果。
- DELETE:请求删除指定资源。
- PATCH:部分更新指定资源的数据。与 PUT 的区别是,PATCH 只更新资源的一部分,而 PUT 会替换整个资源。
- HEAD:类似 GET 请求,但只获取响应的头部信息,不返回实际的资源数据。
- OPTIONS:请求服务器,询问支持哪些 HTTP 方法。常用于跨域请求中的预检请求。
(2)请求网址
网址格式如下:
协议://主机名:端口号/路径?查询字符串#片段标识符
说明:
- 协议(Scheme):指定访问资源所使用的协议。常见的协议包括:
http
或https
(超文本传输协议)、
ftp
(文件传输协议)、
mailto
(用于电子邮件地址)、
file
(本地文件) - 主机名(Host):指定资源所在的服务器的域名或 IP 地址。
通常为一个域名,如www.example.com
,
或者是 IP 地址,如192.168.1.1
。 - 端口号(Port)(可写可不写):指定服务器的端口,通常省略。
默认情况下:http
默认端口为 80、https
默认端口为 443。
如果指定了非默认端口,则需要在主机名后加上端口号,用冒号分隔,如www.example.com:8080
。 - 路径(Path):指定请求资源在服务器上的位置。
例如,/products/123
表示访问/products/123
这个路径的资源。 - 查询字符串(Query)(可写可不写):以
?
开头,包含一个或多个键值对,用于传递参数。
例如,?id=123&name=abc
,查询字符串由参数名和值组成,多个参数用&
分隔。 - 片段标识符(Fragment)(可写可不写):以
#
开头,指向文档中的一个特定位置。
用于指定页面内的某个部分。例如,#section2
指向页面的第二个部分。
举个例子:
https://www.example.com:8080/products/123?id=456&color=red#review
解释:
- 协议:
https
- 主机名:
www.example.com
- 端口号:
8080
- 路径:
/products/123
- 查询字符串:
?id=456&color=red
- 片段标识符:
#review
(3)请求头
请求头是 HTTP 请求中的一部分,它包含了关于客户端、请求以及数据的附加信息。
客户端通过它向服务器传递元数据,帮助服务器理解请求的内容、用户的偏好、客户端环境等。
举个例子:
请求头就像你在向别人请求东西时提供的一些附加信息。
假设你在网上买东西,除了告诉商家你想买的产品,还会提供一些其他信息,比如:
你用的是什么设备(是手机还是电脑)
你能接受的商品类型(比如希望商品图片清晰,或者只想看某种品牌的商品)
这些附加信息就像是请求头里的内容,它们帮助商家(服务器)了解你具体的需求,确保你能收到最合适的产品。
所以你要访问一个网页,你的请求头可能包含以下信息:
(注:了解即可)
1. Host
-
指定请求的服务器域名或 IP 地址。从 HTTP/1.1 版本开始,这是必需的头部字段。
-
示例:
Host: www.example.com
2. User-Agent
-
简称UA。表示发送请求的客户端软件类型(如浏览器、操作系统等)。爬虫时加上此部分可以伪装成浏览器。
-
示例:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
3. Accept
-
指定客户端能够处理的响应内容类型。通常用于指定请求的数据格式
-
示例:
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp,*/*;q=0.8
4. Accept-Language
-
告诉服务器客户端能够理解的语言。例如,可以告诉服务器希望获取中文或英文的内容。
-
示例:
Accept-Language: en-US,en;q=0.5
5. Content-Type
-
仅在请求体中有数据时使用,指定请求体的媒体类型。例如,表单提交时,数据的格式是
application/x-www-form-urlencoded
,上传文件时是multipart/form-data
。 -
示例:
Content-Type: application/json
-
用于身份验证,携带认证信息,如令牌或基本认证信息。常用于需要用户验证的资源。
-
示例:
Authorization: Bearer <token>
-
客户端向服务器发送的 Cookie 信息,服务器根据该信息识别用户状态(如登录状态)。
-
示例:
Cookie: sessionid=abc123; user=JohnDoe
8. Accept-Encoding
-
告诉服务器客户端支持的编码方式,通常用于压缩响应体。
-
示例:
Accept-Encoding: gzip, deflate, br
9. Connection
-
表示是否保持持久连接,决定在请求完成后是否保持与服务器的连接。
-
示例:
Connection: keep-alive
10. Referer
-
表示来自哪个 URL 的请求,通常用于了解用户访问的来源页面。
-
示例:
Referer: https://www.example.com/previous-page
(4)请求体
请求体是 HTTP 请求中的一部分,主要用于携带客户端发送给服务器的实际数据内容。
可以理解为你在向服务器请求某项服务时,所附带的具体信息或者数据。
举个例子:
如果你填写了一个网上表单,提交了你的个人信息(比如名字、地址、电子邮件等),这些信息就是通过请求体发送到服务器的。
(Tips:对于请求体来说,一般是POST请求的表单数据,对于GET请求,请求体为空)
对于请求头和请求体的区别?
- 请求头:
包含一些附加信息(比如浏览器类型、请求语言、是否有登录状态等)
帮助服务器理解如何处理请求。 - 请求体:
包含实际的数据内容,是请求的核心部分
比如你提交的表单数据、上传的文件等。
四、响应部分
响应,即Response。
由服务器给用户的信息。包括三部分:响应状态码、响应头、响应体。
(1)响应状态码
就像前文所说,这就是根据给出的数字,来判定响应是否正常。
比如,200表示正常、404表示找不到等,都是常见状态码。
下面汇总了常见的状态码及错误原因:
1. 1xx:信息性状态码
这些状态码表示请求已被接收,正在继续处理。
-
100 Continue:表示客户端可以继续发送请求的其余部分(通常用于大文件上传时,客户端先发送请求头,服务器返回 100 状态码,客户端再发送请求体)。
2. 2xx:成功状态码
这些状态码表示请求已成功被处理。
-
200 OK:请求成功,服务器返回请求的资源。
-
201 Created:请求成功,服务器创建了新的资源(通常用于 POST 请求)。
-
204 No Content:请求成功,但服务器没有返回任何内容(常见于删除操作)。
3. 3xx:重定向状态码
这些状态码表示请求需要进一步的操作才能完成(通常是页面重定向)。
-
301 Moved Permanently:请求的资源已被永久移到新的位置,响应中会带有新的 URL。
-
302 Found:请求的资源临时移动到其他位置,客户端会按照新 URL 继续请求。
-
304 Not Modified:资源未修改,客户端可以使用缓存的副本。
4. 4xx:客户端错误状态码
这些状态码表示请求有错误,客户端需要修正请求后再试。
-
400 Bad Request:请求无效,服务器无法理解请求。
-
401 Unauthorized:请求未授权,通常需要提供身份验证(如登录)。
-
403 Forbidden:服务器拒绝请求,即使用户已认证。
-
404 Not Found:请求的资源不存在或无法找到。
-
405 Method Not Allowed:请求方法不被允许(例如,服务器只允许 GET 请求,但客户端使用了 POST 请求)。
5. 5xx:服务器错误状态码
这些状态码表示服务器未能完成有效请求,通常是服务器本身的问题。
-
500 Internal Server Error:服务器遇到错误,无法完成请求。
-
502 Bad Gateway:服务器作为网关或代理时,收到来自上游服务器的无效响应。
-
503 Service Unavailable:服务器暂时无法处理请求,通常是因为服务器超负荷或正在维护。
- 504 Gateway Timeout:服务器作为网关或代理时,未能在规定时间内从上游服务器获取响应。
(2)响应头
响应头是服务器在响应客户端请求时,附加在响应消息中的一些信息。
这些信息主要用于描述服务器的处理结果、返回的数据类型、缓存策略等。
可以理解为服务器对客户端请求的“回馈”信息,告诉客户端服务器的状态、资源类型等。
下面为常用响应头:
-
Content-Type:指定响应体的内容类型(即数据的格式)。例如:
Content-Type: text/html
:返回的是 HTML 内容。Content-Type: application/json
:返回的是 JSON 格式数据。Content-Type: image/png
:返回的是 PNG 图片。
-
Content-Length:表示响应体的大小,以字节为单位
-
Date:返回响应的时间戳,表示服务器响应的日期和时间
-
Server:表示服务器的类型和版本
-
Set-Cookie:服务器向客户端发送的 cookie,用于保存客户端的状态信息。
(3)响应体
响应体是服务器在响应客户端请求时,返回给客户端的实际数据内容。
举个例子:
比如你请求一个网页时,响应体就是返回的 HTML 内容;你请求某个数据接口时,响应体就是返回的 JSON 数据。
如下图所示:
当我们打开Preview中,看到的蓝框内的内容,就是响应体。
在爬虫时,我们要做的,就是解析它!!!
它的常见内容有:
-
HTML 页面:如果你请求一个网页,响应体通常是该网页的 HTML 内容。
例如,浏览器向服务器请求https://example.com
,服务器返回一个 HTML 页面,响应体就是网页的 HTML 代码。 -
JSON 数据:在许多现代 Web 应用中,通常使用 JSON 格式。
例如,发送一个 GET 请求到一个数据接口,返回的响应体是 JSON 数据:
{ "name": "John Doe", "age": 30 } -
图片或文件:如果请求的是一个文件(如图片、视频等),响应体包含文件的内容。
例如,浏览器请求一个 PNG 图片,服务器返回响应体,其中包含该图片的二进制数据。 -
文本内容:如果请求的是纯文本数据,响应体可能直接是一些文本内容。
相关文章:

Python!从0开始学爬虫:(一)HTTP协议 及 请求与响应
前言 爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。 今天的HTTP协议,会有助于我们更好的了解网络。 一、什么是HTTP协议 (1)定义 HTTP(超文本传输协议ÿ…...
[ Spring ] Spring Cloud Gateway 2025 Comprehensive Overview
文章目录 Spring Gateway ArchitectureProject Level DependencyService CenterService ProviderGateway ServiceLaunch All Service Spring Gateway Architecture Service Center : register and find service providerService Provider : programs that provide actual serv…...
【项目初始化】自定义异常处理
我们在项目初始化的工作之一就是要自定义异常处理,用来处理项目中出现的各种异常,如业务异常、系统异常等等。 这些属于项目的通用基础代码,在任何后端中都可以复用。 1. 自定义错误码 自定义错误码,对错误进行收敛,…...
Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决
个人博客地址:Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决 | 一张假钞的真实世界 msvcp120.dll、msvcr120.dll、vcomp120.dll属于VC2013版中的动态链接库,如果丢失重新安装VC2013即可。下载地址:https://www.microsoft.com…...

【嵌入式】总结——Linux驱动开发(三)
鸽了半年,几乎全忘了,幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的,本篇与前两篇一样,重点在于使用、快速体验,uboot、linux、根文件系统不作深入理解,能用就行。 重新梳理一下脉络,本…...

计算机图形学:实验三 光照与阴影
一、程序功能设计 设置了一个3D渲染场景,支持通过键盘和鼠标控制交互,能够动态调整光源位置、物体材质参数等,具有光照、阴影和材质效果的场景渲染。 OpenGL物体渲染和设置 创建3D物体:代码中通过 openGLObject 结构体表示一个…...
「 机器人 」扑翼飞行器混合控制策略缺点浅谈
前言 将基于模型的控制与强化学习策略融合在扑翼飞行器中,虽然能够兼顾系统稳定性与极限机动能力,但也面临了更高的系统复杂性、对硬件算力与可靠性的额外要求,以及难以回避的能量效率等方面挑战。以下从四个方面进行归纳与分析。 1. 系统复杂性增加 1.1 两种控制方法的并存…...

蓝桥杯算法日常|c\c++常用竞赛函数总结备用
一、字符处理相关函数 大小写判断函数 islower和isupper:是C标准库中的字符分类函数,用于检查一个字符是否为小写字母或大写字母,需包含头文件cctype.h(也可用万能头文件包含)。返回布尔类型值。例如: #…...

每日十题八股-2025年1月24日
1.面试官:Kafka 百万消息积压如何处理? 2.面试官:最多一次、至少一次和正好一次有什么区别? 3.面试官:你项目是怎么存密码的? 4.面试官:如何设计一个分布式ID? 5.面试官:单点登录是怎么工作的…...
tomcat的accept-count、max-connections、max-threads三个参数的含义
tomcat的accept-count、max-connections、max-threads三个参数的含义 tomcat的accept-count、max-connections、max-threads三个参数的含义 max-connections:最大连接数 最大连接数是指,同一时刻,能够连接的最大请求数 需要注意的是&#x…...
【无标题】mysql python 连接
coding:utf8 import os import pymysql import yaml from common.log import logger class Mysql: # 处理.sql备份文件为SQL语句 def __read_sql_file(self,file_path): # 打开SQL文件到f sql_list = [] with open(file_path, ‘r’, encoding=‘utf8’) as f: # 逐行读取和…...
linux naive代理设置
naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...

[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统
一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础,它不仅为芯片本身提供稳定的电源,还通过多种电源管理功能优化功耗、延长电池寿命,并确保系统的可靠性和稳定性。 二、电源监控器 作用:保证STM32芯片工作在…...

DBO优化最近邻分类预测matlab
蜣螂优化算法(Dung Beetle Optimizer,简称 DBO)作为一种新兴的群智能优化算法,于 2022 年末被提出,其灵感主要来源于蜣螂的滚球、跳舞、觅食、偷窃以及繁殖等行为。 本次使用的数据为 Excel 格式的分类数据集。该数据…...

【深入理解FFMPEG】命令行阅读笔记
这里写自定义目录标题 第三章 FFmpeg工具使用基础3.1 ffmpeg常用命令3.1.13.1.3 转码流程 3.2 ffprobe 常用命令3.2.1 ffprobe常用参数3.2.2 ffprobe 使用示例 3.3 ffplay常用命令3.3.1 ffplay常用参数3.3.2 ffplay高级参数3.3.4 ffplay快捷键 第4章 封装与解封装4.1 视频文件转…...

图形化数据报文转换映射工具
目录 概要整体架构流程技术名词解释技术细节小结 概要 在当今数字化时代,数据的处理和分析是企业、科研机构以及各类组织日常运营的核心环节。数据来源广泛,格式多样,常见的数据格式包括XML(可扩展标记语言)和JSON&a…...

智能体0门槛开发
分享一个智能体开发流程。 2025 年啊,好多专家还有行业报告都觉得这是智能体(AI Agent)应用的头一年。相关的应用在商业、工业、消费等好些领域都到了关键的时候,这意味着从实验室走向大规模实际应用的重要转变。而且呢࿰…...

ssh密钥登录GitHub时一直提示“Error: Permission denied (publickey)”
起因 环境:Windows10 背景:之前就是按照官方说明创建个rsa密钥,在git后台添加上,就行了,近期怎么添加怎么失败,总是“Error: Permission denied (publickey)”的提示! 尝试 各种尝试…...

mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用
全国地图json数据下载地址 目录 html加载全部代码 方式一:使用html方式加载geojson 1. 初始化地图 2. 加载geojson数据 设置geojson图层样式,设置type加载数据类型 设置线条 鼠标移入改变颜色,设置图层属性,此处是fill-extru…...
考研机试题:打印日期
描述 给出年分m和一年中的第n天,算出第n天是几月几号。 输入描述: 输入包括两个整数y(1<y<3000),n(1<n<366)。 输出描述: 可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。 …...
在软件开发中正确使用MySQL日期时间类型的深度解析
在日常软件开发场景中,时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志,到供应链系统的物流节点时间戳,时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库,其日期时间类型的…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

九天毕昇深度学习平台 | 如何安装库?
pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...