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
-
用于身份验证,携带认证信息,如令牌或基本认证信息。常用于需要用户验证的资源。
-
示例:
Authorization: Bearer <token>
-
客户端向服务器发送的 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 图片,服务器返回响应体,其中包含该图片的二进制数据。 -
文本内容:如果请求的是纯文本数据,响应体可能直接是一些文本内容。
相关文章:

Python!从0开始学爬虫:(一)HTTP协议 及 请求与响应
前言 爬虫需要基础知识,HTTP协议只是个开始,除此之外还有很多,我们慢慢来记录。 今天的HTTP协议,会有助于我们更好的了解网络。 一、什么是HTTP协议 (1)定义 HTTP(超文本传输协议ÿ…...

[ Spring ] Spring Cloud Gateway 2025 Comprehensive Overview
文章目录 Spring Gateway ArchitectureProject Level DependencyService CenterService ProviderGateway ServiceLaunch All Service Spring Gateway Architecture Service Center : register and find service providerService Provider : programs that provide actual serv…...

【项目初始化】自定义异常处理
我们在项目初始化的工作之一就是要自定义异常处理,用来处理项目中出现的各种异常,如业务异常、系统异常等等。 这些属于项目的通用基础代码,在任何后端中都可以复用。 1. 自定义错误码 自定义错误码,对错误进行收敛,…...

Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决
个人博客地址:Windows10安装MySQL找不到MSVCR120.dll和MSVCP120.dll问题解决 | 一张假钞的真实世界 msvcp120.dll、msvcr120.dll、vcomp120.dll属于VC2013版中的动态链接库,如果丢失重新安装VC2013即可。下载地址:https://www.microsoft.com…...

【嵌入式】总结——Linux驱动开发(三)
鸽了半年,几乎全忘了,幸亏前面还有两篇总结。出于快速体验嵌入式linux的目的,本篇与前两篇一样,重点在于使用、快速体验,uboot、linux、根文件系统不作深入理解,能用就行。 重新梳理一下脉络,本…...

计算机图形学:实验三 光照与阴影
一、程序功能设计 设置了一个3D渲染场景,支持通过键盘和鼠标控制交互,能够动态调整光源位置、物体材质参数等,具有光照、阴影和材质效果的场景渲染。 OpenGL物体渲染和设置 创建3D物体:代码中通过 openGLObject 结构体表示一个…...

「 机器人 」扑翼飞行器混合控制策略缺点浅谈
前言 将基于模型的控制与强化学习策略融合在扑翼飞行器中,虽然能够兼顾系统稳定性与极限机动能力,但也面临了更高的系统复杂性、对硬件算力与可靠性的额外要求,以及难以回避的能量效率等方面挑战。以下从四个方面进行归纳与分析。 1. 系统复杂性增加 1.1 两种控制方法的并存…...

蓝桥杯算法日常|c\c++常用竞赛函数总结备用
一、字符处理相关函数 大小写判断函数 islower和isupper:是C标准库中的字符分类函数,用于检查一个字符是否为小写字母或大写字母,需包含头文件cctype.h(也可用万能头文件包含)。返回布尔类型值。例如: #…...

每日十题八股-2025年1月24日
1.面试官:Kafka 百万消息积压如何处理? 2.面试官:最多一次、至少一次和正好一次有什么区别? 3.面试官:你项目是怎么存密码的? 4.面试官:如何设计一个分布式ID? 5.面试官:单点登录是怎么工作的…...

tomcat的accept-count、max-connections、max-threads三个参数的含义
tomcat的accept-count、max-connections、max-threads三个参数的含义 tomcat的accept-count、max-connections、max-threads三个参数的含义 max-connections:最大连接数 最大连接数是指,同一时刻,能够连接的最大请求数 需要注意的是&#x…...

【无标题】mysql python 连接
coding:utf8 import os import pymysql import yaml from common.log import logger class Mysql: # 处理.sql备份文件为SQL语句 def __read_sql_file(self,file_path): # 打开SQL文件到f sql_list = [] with open(file_path, ‘r’, encoding=‘utf8’) as f: # 逐行读取和…...

linux naive代理设置
naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...

[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统
一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础,它不仅为芯片本身提供稳定的电源,还通过多种电源管理功能优化功耗、延长电池寿命,并确保系统的可靠性和稳定性。 二、电源监控器 作用:保证STM32芯片工作在…...

DBO优化最近邻分类预测matlab
蜣螂优化算法(Dung Beetle Optimizer,简称 DBO)作为一种新兴的群智能优化算法,于 2022 年末被提出,其灵感主要来源于蜣螂的滚球、跳舞、觅食、偷窃以及繁殖等行为。 本次使用的数据为 Excel 格式的分类数据集。该数据…...

【深入理解FFMPEG】命令行阅读笔记
这里写自定义目录标题 第三章 FFmpeg工具使用基础3.1 ffmpeg常用命令3.1.13.1.3 转码流程 3.2 ffprobe 常用命令3.2.1 ffprobe常用参数3.2.2 ffprobe 使用示例 3.3 ffplay常用命令3.3.1 ffplay常用参数3.3.2 ffplay高级参数3.3.4 ffplay快捷键 第4章 封装与解封装4.1 视频文件转…...

图形化数据报文转换映射工具
目录 概要整体架构流程技术名词解释技术细节小结 概要 在当今数字化时代,数据的处理和分析是企业、科研机构以及各类组织日常运营的核心环节。数据来源广泛,格式多样,常见的数据格式包括XML(可扩展标记语言)和JSON&a…...

智能体0门槛开发
分享一个智能体开发流程。 2025 年啊,好多专家还有行业报告都觉得这是智能体(AI Agent)应用的头一年。相关的应用在商业、工业、消费等好些领域都到了关键的时候,这意味着从实验室走向大规模实际应用的重要转变。而且呢࿰…...

ssh密钥登录GitHub时一直提示“Error: Permission denied (publickey)”
起因 环境:Windows10 背景:之前就是按照官方说明创建个rsa密钥,在git后台添加上,就行了,近期怎么添加怎么失败,总是“Error: Permission denied (publickey)”的提示! 尝试 各种尝试…...

mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用
全国地图json数据下载地址 目录 html加载全部代码 方式一:使用html方式加载geojson 1. 初始化地图 2. 加载geojson数据 设置geojson图层样式,设置type加载数据类型 设置线条 鼠标移入改变颜色,设置图层属性,此处是fill-extru…...

考研机试题:打印日期
描述 给出年分m和一年中的第n天,算出第n天是几月几号。 输入描述: 输入包括两个整数y(1<y<3000),n(1<n<366)。 输出描述: 可能有多组测试数据,对于每组数据, 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。 …...

OpenHarmonyOS 3.2 编译生成的hap和app文件的名称如何配置追加版本号?
找了一圈发现官方的文档都是最新的,3.2很多API都不支持,比如获取OhosAppContext,通过OhosAppContext来获取应用版本号,最终是通过读取app.json5的文件内容来读取版本号,最终修改entry下的hvigorfile.ts如下,…...

【openwrt】openwrt odhcpd配置介绍
odhcpd odhcpd是一个嵌入式DHCP/DHCPv6/RA服务器和NDP中继的进程,odhcpd是一个守护进程,用于服务和中继IP管理协议,以配置客户端和下游路由器。它试图遵循IPv6家用路由器的RFC 6204要求。odhcpd为DHCP、RA、无状态SLAAC和有状态DHCPv6、前缀委派提供服务器服务,并可用于在没…...

基于神经网络的视频编码NNVC(1):帧内预测
在H.266/VVC发布后,基于传统编码框架提升压缩率越来越难,随着深度学习的发展,研究人员开始尝试将神经网络引入编码器。为此,JVET工作组在2020年成立AHG11小组来专门进行基于神经网络的视频编码的研究。 为了方便研究,工…...

Android开发,待办事项提醒App的设计与实现
文章目录 1. 研究目的2. 主要内容3. 运行效果图4. 涉及到的技术点5. 开发环境6. 关于作者其它项目视频教程介绍 1. 研究目的 当今,随着时代的发展和计算机的普及,人们开始利用网络来记录并管理日常的事务,时下这方面的软件数不胜数。各种日程管理软件就是将每天的工作和事务安…...

豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)
文章目录 豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)写在前面数据采集(Visual Studio Code+Navicat)1.观察网页信息2.编写Scrapy代码(Visual Studio Code)2.1 创建Scrapy项目`doubanProject`2.2 创建爬虫脚本`douban.py`2.3 修改`douban.py`的代码2…...

MySQL索引——让查询飞起来
文章目录 索引是什么??硬件理解MySQL与存储 MySQL 与磁盘交互基本单位索引的理解B vs B聚簇索引 VS 非聚簇索引索引操作创建主键索引唯一索引的创建普通索引的创建全文索引的创建查询索引删除索引 在现代数据库应用中,查询性能是决定系统响应…...

Springboot集成Elasticsearch8.0(ES)版本,采用JAVA Client方式进行连接和实现CRUD操作
本文章介绍了 springboot t集成Elasticsearch8.0(ES)版本,如何通过 AVA Client方式进行连接和实现CRUD操作 在ES7.15版本之后,ES官方将高级客户端 RestHighLevelClient标记为弃用状态。同时推出了全新的 Java API客户端 Elasticsearch Java API Client,该客户端也将在 Ela…...

【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告
引言 随着 Debian 11 和 Ubuntu 22.04 版本的推出,APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用,新的密钥管理机制要求使用 /etc/apt/keyrings/ 或 /etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要…...

洛谷P1143 进制转换
题目链接:P1143 进制转换 - 洛谷 | 计算机科学教育新生态 题目难度:普及— 解题思路:本题先将输入的数转为10进制,然后取模,最后倒着输出就好了,最后直接上代码 #include<bits/stdc.h> using namespa…...

99.12 金融难点通俗解释:毛利率
目录 0. 承前1. 简述2. 比喻:冰淇淋店赚钱2.1 第一步:准备材料2.2 第二步:卖冰淇淋2.3 第三步:计算毛利率 3. 生活中的例子3.1 好的毛利率3.2 一般的毛利率3.3 差的毛利率 4. 小朋友要注意4.1 毛利率高不一定好4.2 毛利率低不一定…...