当前位置: 首页 > news >正文

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

网络基础与 HTTP 协议

文章目录

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

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

网络爬虫的本质就是:

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

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

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

二、URL:统一资源定位符

1. URL 的定义

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

格式结构:

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

案例:

在这里插入图片描述

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 响应结构

响应头结构

在这里插入图片描述

响应体结构

在这里插入图片描述

网页主体内容

<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. 基本结构

<!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文档)
├── <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 数据解析》

http://www.dtcms.com/a/515503.html

相关文章:

  • iis6建设网站叶梓 wordpress 主题
  • 【C#】获取电脑网卡MAC地址
  • ​2025网络安全前景与学习路线:抓住数字时代的安全机遇
  • Linux小课堂: SSH 服务部署与客户端连接实战详解
  • 好看网站手机版南开做网站公司
  • 七日 Go 的自学笔记 (一)
  • Node.js 接入淘宝 API 实战:构建商品信息实时同步服务
  • Node.js SQL数据库:MySQL/PostgreSQL集成
  • 虚拟化网络连接与虚拟机嵌套
  • 无锡企业制作网站网站建设项目的费用做什么科目
  • Slack消息体->消息ID的设计
  • 如何轻松将 Outlook 联系人导出到 Excel
  • 图像尺寸测量仪应用Type-C接口:精准检测,赋能科技
  • C++仿mudo库高并发服务器项目:Buffer模块
  • 找能做网站的搜狗推广下架
  • 性能分析--perfetto工具使用
  • 【matlab】如何提取论文plot图中的数据
  • 手机网站开发的目的ppt免费背景图片
  • Java 核心知识点查漏补缺(一)
  • UE5 C++ CVar控制台命令字段使用
  • 从图像处理到AI识别:直播美颜sdk如何实现高效一键美颜?
  • ESD防护设计宝典(十三):电快速瞬变脉冲群(EFT)防护与整改
  • 做百度推广去些网站加客户二级域名免费申请网站
  • 婚介 东莞网站建设西部数码网站源码
  • 云计算实验4——CentOS中HBase的安装
  • Excel文件中的VBA脚本,在文件使用WPS编辑保存后无法执行
  • LLD(详细设计文档)输出标准模板
  • 【山西政务服务网-注册_登录安全分析报告】
  • 云原生安全深度实战:从容器安全到零信任架构
  • Java导出写入固定Excel模板数据