(22)100天python从入门到拿捏《【网络爬虫】网络基础与HTTP协议》

网络基础与 HTTP 协议

文章目录

  • [网络基础与 HTTP 协议](#网络基础与 HTTP 协议)
    • 一、网络爬虫的"底层通信"
    • 二、URL:统一资源定位符
      • [1. URL 的定义](#1. URL 的定义)
      • [2. URL的组成部分](#2. URL的组成部分)
      • [3. URL编码](#3. URL编码)
    • [三、HTTP 协议](#三、HTTP 协议)
      • [1. HTTP 请求与响应模型](#1. HTTP 请求与响应模型)
      • [2. HTTP请求报文结构](#2. HTTP请求报文结构)
      • [3. 常见请求方法](#3. 常见请求方法)
      • [4. HTTP 响应结构](#4. HTTP 响应结构)
      • [5. 常见HTTP状态码](#5. 常见HTTP状态码)
    • 四、HTML:超文本标记语言
      • [1. 基本结构](#1. 基本结构)
      • [2. 网页的层次结构](#2. 网页的层次结构)
    • 五、User-Agent用户代理
      • [1. 定义](#1. 定义)
      • [2. 常见UA](#2. 常见UA)
      • [3. 爬虫中伪装UA](#3. 爬虫中伪装UA)

一、网络爬虫的"底层通信"

网络爬虫的本质就是:

模拟浏览器向服务器发送请求 → 获取网页内容 → 提取有用数据

这个过程主要依靠下面的机制实现:

  • 网络协议(TCP/IP)
  • HTTP(超文本传输协议)
  • HTML 网页结构
  • User-Agent 浏览器标识

二、URL:统一资源定位符

1. URL 的定义

URL是互联网上资源的地址,就像网页的"门牌号"。

格式结构:

复制代码
协议://主机名:端口/路径?参数#锚点

案例:

http 复制代码
https://blog.csdn.net/qq_64736204?type=blogColumn

解读

  1. 协议 :https,是一种通过SSL/TLS对传输的数据进行加密的安全通信协议;
  2. 主机名blog.csdn.net,主机名即服务器的域名,浏览器需要通过DNS域名解析协议把域名转为服务器的IP,才能与服务器进行通信;
  3. 端口 :没有显示指定,此时使用https协议的默认端口443,完整的访问地址应该是 blog.csdn.net:443
  4. 路径 :/qq_64736204,指明了在服务器上要访问的特定资源位置,qq_64736204 是用户的ID,应着CSDN博客平台上的个人博客主页
  5. 参数 :type=blogColumn,以?开头,这里有一个参数对: 参数名 : type,参数值: blogColumn,该参数告诉CSDN服务器需要访问用户qq_64736204的"博客专栏";
  6. 锚点 :无,锚点以**#开头,用于指向网页内部的某个特定片段或标题**。由于它不存在,浏览器会默认显示该页面的顶部。

2. URL的组成部分

部分 含义 如下案例
协议 使用的通信方式 http, https, ftp
主机名 服务器域名或IP地址 www.douban.com
端口号 网络服务接口(默认80/443) :443
路径 服务器资源的路径 /search
参数 请求携带的键值对 q=python
锚点 网页内部定位(不会发给服务器) #result

3. URL编码

某些特殊字符如空格、中文等在URL中不能直接使用,必须进行URL编码

案例:

注意:当请求的URL中有中文参数时(如"电影/小说/天气"),必须使用 urllib.parse.quote() 编码后再请求。

三、HTTP 协议

HTTP是客户端与服务器之间通信的规则。爬虫中,我们使用Python构建HTTP客户端,通过模拟浏览器的请求头、会话管理和协议交互,遵循HTTP规范向目标服务器发起请求并处理响应,实现网页数据的自动化采集。

1. HTTP 请求与响应模型

通信流程图:
客户端(浏览器 / 爬虫) 服务器(Web Server) 建立TCP连接(三次握手) HTTP 请求(Request) 包含:URL、Headers、Body 服务器接收请求并进行处理 例如:读取数据库、生成网页内容 HTTP 响应(Response) 包含:状态码、响应头、HTML内容 客户端解析HTML并渲染网页或提取数据 关闭TCP连接(四次挥手) 客户端(浏览器 / 爬虫) 服务器(Web Server)

2. HTTP请求报文结构

一个完整的请求主要包括如下:

说明

GET:请求方法,表示客户端要获取资源;

/1.png?..:请求路径与查询参数URL。表明客户端要访问服务器的 /1.png 文件;

HTTP/1.1:表示使用的 HTTP 协议版本;

Accept :表示客户端能接收的响应类型,这里表示浏览器支持多种图片格式(avif、webp、apng、svg+xml),*/* 表示可以接受任何类型;

Accept-Encoding:支持的压缩格式。服务器可以用这些算法压缩响应体以减少传输体积。gzip是最常见的压缩方式,br是Google推出的压缩方法,zstd是Facebook开发的压缩算法;

Accept-Language:浏览器首选语言是中文;

Connection: keep-alive,表示建立持续的TCP连接,避免重复建立连接;

Cookie :存储了 用户身份信息、登录状态;作用是让服务器识别你是谁;

Host:目标服务器域名,在HTTP/1.1是必需字段;

Referer: https://blog.csdn.net/qq_64736204/article/details/153483402,表示当前请求的来源页面,即是谁触发了这次请求。这里说明图片请求来自笔者浏览的CSDN博客文章;

User-Agent:标识客户端信息,浏览器类型、操作系统,服务器用它判断请求来自浏览器、爬虫还是移动设备。

部分 说明
请求行 请求方法 + 路径 + 协议版本
请求头 浏览器标识、接收类型、cookie
请求体 一般在POST请求中携带数据

3. 常见请求方法

方法 功能 说明
GET 获取资源 获取网页、图片、API数据
POST 提交数据 表单登录、搜索提交
PUT 更新资源 更新数据库数据
DELETE 删除资源 删除记录
HEAD 获取响应头 检查网页是否存在

get请求

渲染并打印 HTML 内容

原文对比

post请求

4. HTTP 响应结构

响应头结构

响应体结构

网页主体内容

html 复制代码
<body class="nodata  " style="">
        <div id="toolbarBox" style="min-height: 48px;"></div>
  ...
</body>
  • <body>:承载网页主要可见内容;
  • 工具栏正文区域广告栏评论区内容均在此定义;
  • CSDN博客的页面是动态加载的,部分内容由 JavaScript 渲染

汇总表

部分 含义 案例
状态行 协议版本 + 状态码 + 状态描述 HTTP/1.1 200 OK
响应头 服务器类型、内容格式、缓存策略 Date: Tue, 21 Oct 2025 17:26:29 GMT
响应体 实际网页内容 ...

5. 常见HTTP状态码

状态码 类型 含义
200 成功 请求成功
301 / 302 重定向 页面跳转
403 禁止访问 IP封禁、无权限
404 未找到 URL错误
500 服务器错误 程序异常

在爬虫中,我们需要用状态码判断爬取是否成功。

四、HTML:超文本标记语言

HTML 是网页的结构语言,爬虫要"提取数据",必须理解它的标签层级。

1. 基本结构

html 复制代码
<!DOCTYPE html>
<html>
  <head>
    <title>(21)100天python从入门到拿捏《XML 数据解析》-CSDN博客</title>
  </head>
  <body>
    <h1 class="title-article" id="articleContentId">(21)100天python从入门到拿捏《XML 数据解析》</h1>
     <p>
         <strong>YAML</strong>
         &#xff1a;缩进表示层级 &#xff0c;支持简短语法、序列及锚点 &#xff0c;允许注释。
     </p>
    <a href="https://blog.csdn.net/qq_64736204/article/details/153224770">100天python从入门到拿捏《JSON 数据解析》
    </a>
  </body>
</html>
标签 含义
<head> 元信息如标题、编码
<body> 页面主体
<h1>~<h6> 标题
<p> 段落
<a> 超链接
<img> 图片
<div> / <span> 区块 / 内联容器

2. 网页的层次结构

HTML被浏览器解析成"文档对象模型,即DOM树":

DOM层级图:

html 复制代码
<html>  ← 根节点(整个HTML文档)
├── <head>  ← 文档头部(元数据、标题、样式)
│    ├── <meta charset="utf-8">  ← 指定字符编码
│    ├── <title>网页标题</title>  ← 显示在浏览器标签页上
│    ├── <link rel="stylesheet" href="style.css">  ← 外部CSS
│    └── <script src="main.js"></script>  ← 外部JavaScript文件
│
└── <body>  ← 网页主体内容(用户可见部分)
     ├── <header>  ← 页眉,通常包含LOGO或导航栏
     │     └── <h1>网站主标题</h1>
     │
     ├── <nav>  ← 导航栏
     │     ├── <a href="#home">首页</a>
     │     ├── <a href="#about">关于</a>
     │     └── <a href="#contact">联系</a>
     │
     ├── <main>  ← 主体内容区域
     │     ├── <section>  ← 内容区块
     │     │     ├── <h2>章节标题</h2>
     │     │     └── <p>正文段落内容......</p>
     │     └── <article>  ← 单篇文章或独立内容
     │           ├── <h2>文章标题</h2>
     │           ├── <p>文章内容......</p>
     │           └── <a href="#">阅读更多</a>
     │
     ├── <aside>  ← 侧边栏,可放广告、推荐链接等
     │     └── <p>侧栏内容</p>
     │
     └── <footer>  ← 页脚,包含版权信息
           └── <p>© 2025 MyWebsite. All rights reserved.</p>

爬虫提取数据的本质:在 DOM 树中找到目标节点,读取标签属性或文本内容。

五、User-Agent用户代理

1. 定义

User-Agent 是HTTP请求头的一部分,用于向服务器表明客户端身份。

如:

http 复制代码
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/121.0

服务器会根据 UA:

  • 判断你是 PC、手机还是爬虫
  • 返回对应版本网页
  • 有时用来识别和封禁爬虫

2. 常见UA

类型 例子
Chrome 浏览器 Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/121.0
iPhone Safari Mozilla/5.0 (iPhone; CPU iPhone OS 15_0) AppleWebKit/605.1.15
爬虫工具 Python-urllib/3.9, Scrapy/2.9

3. 爬虫中伪装UA

案例:

py 复制代码
ua_list = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/121.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)",
]

这里的伪装UA列表中第一个是Windows系统,第二个是Mac OS系统

为什么要伪装?

  • 防止被网站识别为爬虫,Python默认UA容易被封
  • 模拟真实浏览器访问行为

python学习专栏导航
(1)100天python从入门到拿捏《Python 3简介》
(2)100天python从入门到拿捏《python应用前景》
(3)100天python从入门到拿捏《数据类型》
(4)100天python从入门到拿捏《运算符》
(5)100天python从入门到拿捏《流程控制语句》
(6)100天python从入门到拿捏《推导式》
(7)100天python从入门到拿捏《迭代器和生成器》
(8)100天python从入门到拿捏《函数和匿名函数》
(9)100天python从入门到拿捏《装饰器》
(10)100天python从入门到拿捏《Python中的数据结构与自定义数据结构》
(11)100天python从入门到拿捏《模块》
(12)100天python从入门到拿捏《文件操作》
(13)100天python从入门到拿捏《目录操作》
(14)100天python从入门到拿捏《Python的错误与异常机制》
(15)100天python从入门到拿捏《面向对象编程》
(16)100天python从入门到拿捏《标准库》
(17)100天python从入门到拿捏《正则表达式》
(18)100天python从入门到拿捏《网络编程》
(19)100天python从入门到拿捏《多线程》
(20)100天python从入门到拿捏《JSON 数据解析》
(21)100天python从入门到拿捏《XML 数据解析》

相关推荐
黑岚樱梦5 小时前
计算机网络第四章学习
网络·学习·计算机网络
微小冷5 小时前
ARP协议详解及其Wireshark抓包测试
网络·测试工具·wireshark·抓包·tcp/ip协议·arp协议·地址解析协议
zzzyulin6 小时前
huggingface transformers调试问题--加载本地路径模型时pdb断点消失
python·transformer
教练、我想打篮球6 小时前
12 pyflink 的一个基础使用, 以及环境相关
python·flink·pyflink
RTC老炮6 小时前
webrtc弱网-RembThrottler类源码分析及算法原理
网络·算法·webrtc
飞翔的佩奇6 小时前
【完整源码+数据集+部署教程】【天线&运输】直升机战机类型识别目标检测系统源码&数据集全套:改进yolo11-CSP-EDLAN
前端·python·yolo·计算机视觉·数据集·yolo11·直升机战机类型识别目标检测系统
C嘎嘎嵌入式开发6 小时前
(21)100天python从入门到拿捏《XML 数据解析》
xml·开发语言·python
嫄码6 小时前
HTTPS的四次握手过程
服务器·网络·https
蓝博AI6 小时前
基于卷积神经网络的香蕉成熟度识别系统,resnet50,vgg16,resnet34【pytorch框架,python代码】
人工智能·pytorch·python·神经网络·cnn