爬虫敲门砖|5分钟拆解HTTP协议:原来你的第一个“爬虫”早已是浏览器

0 阅读4分钟

一、每天打开网页的你,已经在“爬虫”了

​​ 你每天是怎么访问网页的?

打开浏览器,输入地址,回车,页面就出来了。这个动作的背后,正是 HTTP协议 在客户端与服务器之间搭起了一座对话的桥梁。

对于爬虫工程师来说,要理解的第一件事不是怎么写代码,而是理解爬虫的本质:

爬虫,就是用代码模拟浏览器,遵循 HTTP 协议规则,向服务器发起请求并提取响应的过程。

我们先拆解一下两个角色:

客户端 (Client):主动发起数据请求的一方。你用的 Chrome、Safari,或者你即将用 Python 写的那个脚本,都是客户端。

服务端 (Server):存储网页数据、被动响应请求的一方。比如掘金、GitHub 的服务器。

当你知道网页是这样“要”回来的,你其实已经在宏观上理解爬虫了。

二、HTTP 请求:我们到底向服务器“要”了什么?

​​ 客户端索要数据,使用的是一个标准格式——HTTP 请求。它由三部分构成:

请求行:告诉服务器要干什么

请求头:附加上下文身份信息

请求体:提交的具体数据(GET 请求通常没有)

我们以一个最简请求为例。当浏览器访问 www.example.com,发出的请求大致是:

http GET / HTTP/1.1

Host: www.example.com

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)... Accept: text/html,...

① 请求行:指令核心 第一行 GET / HTTP/1.1 就是请求行,包含三个要素:

GET:请求方法,语义是“把数据给我”。这是爬虫最高频使用的方法。

/:请求路径。如果网址是 www.example.com/hello.html,… /hello.html。

HTTP/1.1:协议版本。

🧠 爬虫专家视角:另一种高频方法是 POST,它常把数据放在请求体中,用于登录、提交表单等场景。POST 请求体是爬虫模拟登录时必须精确构造的部分。

② 请求头:你的身份通行证 第二行直到空行前都是请求头,格式为 Name: Value。几个必须关注的头:

Host:目标站点域名。一台服务器上可能托管多个网站,全靠 Host 头区分。

User-Agent:标明客户端类型。这是爬虫的第一道坎——很多反爬系统会直接拦截非浏览器的 User-Agent,后续我们会专门讲如何伪装。

Accept:我能接收哪些类型的数据。

③ 请求体:POST 的“腹语” 请求头和请求体之间由空行隔开。GET 请求一般没有请求体,参数都拼接在 URL 上;POST 请求则把账号密码等敏感数据放在请求体内,相对隐蔽。

三、HTTP 响应:服务器回赠的“包裹”里都有什么?

服务器收到请求后,会返回一个结构对称的 HTTP 响应:

状态行:告诉我结果如何

响应头:返回数据的基本信息

响应体:我真正想要的 HTML、JSON 等数据

针对上面那个请求,服务器的响应大概是:

http HTTP/1.1 200 OK

Content-Type: text/html; charset=UTF-8

Content-Length: 1256

Example Domain ...

① 状态行:成败在此一行 第一行 HTTP/1.1 200 OK 里最核心的是 状态码:

200:成功,数据已放在响应体里。

其他如 301(重定向)、403(禁止)、404(未找到)、500(服务器错误)等,背后都藏着爬虫需要应对的策略。我们会单开一篇来盘点这些“拦路虎”。

② 响应头:数据的说明书 Content-Type:数据类型。text/html; charset=UTF-8 表示 HTML 网页,编码 UTF-8。爬虫如遇 application/json,解析方式将完全不同。

Content-Length:响应体的字节数,可用于判断数据大小。

③ 响应体:爬虫的真正目标 空行之后,就是服务器交付的真实数据。上面示例中是一段 HTML 代码。爬虫后续的核心工作,就是从这段代码里精准提取出文本、链接、图片等信息。

四、一句话串起爬虫工作流

​​ 现在再理解爬虫,就清晰了:

构造请求:像浏览器一样组装请求行和请求头(必要时补齐请求体)。

发送请求:把结构发往目标服务器。

接收响应:拿到状态码、响应头和响应体。

解析数据:从响应体(HTML/JSON)中提取结构化信息。

这就是整个“爬虫”最核心的骨架。而让这个骨架立得住的基石,正是你刚刚用几分钟彻底搞懂的 HTTP 协议。

本讲要点回顾:

HTTP 是客户端与服务端的“对话规则”

请求 = 请求行 + 请求头 + 请求体

响应 = 状态行 + 响应头 + 响应体

爬虫 = 构造请求 → 发送 → 接收响应 → 解析提取

如果这篇文章帮你理清了 HTTP 协议这条爬虫入门“咽喉要道”,欢迎点赞收藏。有任何关于状态码、请求头伪装的具体困惑,评论区等你交流。