ToB企服应用市场:ToB评测及商务社交产业平台
标题:
Python!从0开始学爬虫:(一)HTTP协议 及 请求与响应
[打印本页]
作者:
千千梦丶琪
时间:
2025-1-26 09:22
标题:
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
6.
Authorization
用于身份验证,携带认证信息,如令牌或基本认证信息。常用于须要用户验证的资源。
示例:Authorization: Bearer <token>
7.
Cookie
客户端向服务器发送的 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 图片,服务器返回响应体,其中包含该图片的二进制数据。
文本内容
:如果请求的是纯文本数据,响应体可能直接是一些文本内容。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4