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

部署运行你感兴趣的模型镜像

网络基础与 HTTP 协议

一、网络爬虫的“底层通信”

网络爬虫的本质就是:

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

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

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

二、URL:统一资源定位符

1. URL 的定义

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

格式结构:

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

案例:

在这里插入图片描述

https://blog.youkuaiyun.com/qq_64736204?type=blogColumn

解读

  1. 协议:https,是一种通过SSL/TLS对传输的数据进行加密的安全通信协议;
  2. 主机名:blog.youkuaiyun.com,主机名即服务器的域名,浏览器需要通过DNS域名解析协议把域名转为服务器的IP,才能与服务器进行通信;
  3. 端口:没有显示指定,此时使用https协议的默认端口443,完整的访问地址应该是 blog.youkuaiyun.com:443
  4. 路径:/qq_64736204,指明了在服务器上要访问的特定资源位置,qq_64736204 是用户的ID,应着优快云博客平台上的个人博客主页
  5. 参数:type=blogColumn,以?开头,这里有一个参数对: 参数名: type,参数值: blogColumn,该参数告诉优快云服务器需要访问用户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.youkuaiyun.com/qq_64736204/article/details/153483402,表示当前请求的来源页面,即是谁触发了这次请求。这里说明图片请求来自笔者浏览的优快云博客文章;

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

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

3. 常见请求方法

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

get请求

在这里插入图片描述

渲染并打印 HTML 内容

在这里插入图片描述

原文对比

在这里插入图片描述

post请求

在这里插入图片描述

4. HTTP 响应结构

响应头结构

在这里插入图片描述

响应体结构

在这里插入图片描述

网页主体内容

<body class="nodata  " style="">
        <div id="toolbarBox" style="min-height: 48px;"></div>
  ...
</body>
  • <body>:承载网页主要可见内容;
  • 工具栏正文区域广告栏评论区内容均在此定义;
  • 优快云博客的页面是动态加载的,部分内容由 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. 基本结构

<!DOCTYPE html>
<html>
  <head>
    <title>(21)100天python从入门到拿捏《XML 数据解析》-优快云博客</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.youkuaiyun.com/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文档)
├── <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请求头的一部分,用于向服务器表明客户端身份。

如:

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 SafariMozilla/5.0 (iPhone; CPU iPhone OS 15_0) AppleWebKit/605.1.15
爬虫工具Python-urllib/3.9, Scrapy/2.9

3. 爬虫中伪装UA

案例:

在这里插入图片描述

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 数据解析》

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

硅基工坊

你的打赏是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值