Python学习
一、学前花絮
今天是2025.2.16,按照农历说是蛇年的除夕,也就是最后一天。明天就是马年的春节,也就是第一天。大家感觉是不是一年年的,太快了呢?想起唐代诗人刘希夷的《代悲白头翁》(又名《白头吟》):古人无复洛城东,今人还对落花风。年年岁岁花相似,岁岁年年人不同。
对于我们每个家庭来说,也是一样的。5年前,母亲还在,感觉过年是个很重要的事情。因为父亲早就去世了,所以自从母亲5年前离开之后,家里就没有老人了。我们作为父母的好像也没那么老,但似乎前面已经没有了“屏障”。想表达什么?只是感慨唏嘘而已……
我们继续深入学习有关爬虫方面的知识。对于python爬虫来说,语言规则本身并不太复杂,关键在于如何获取数据,进一步如何合规获取数据。为什么有些网站爬取信息会非常复杂?那是因为很多网站的数据信息是其核心资产,并不希望被无偿爬取,所以设置了很多技术壁垒来“反爬虫”。
对于我们个人学习来说,还是要从正规渠道去爬取数据,本文继续以和风天气网站为例,全面剖析网站中公钥、私钥、加密算法及token的获取等方面的知识。
二、Python 爬取天气数据的全流程实践与密码学解析
2.1 爬虫的 “自由” 与 “边界”
网络爬虫作为数据采集的核心工具,在大数据时代发挥着关键作用,但 “匿名爬取”“暴力请求” 等行为不仅可能导致目标网站服务器过载,更可能触碰法律红线。如何在技术实现与合规要求之间找到平衡?本文以 “爬取和风天气数据” 为典型场景,从密码学基础(公私钥、加密算法)、合规认证流程(Token 生成、项目备案)到代码落地,完整拆解 “合法爬取数据” 的技术逻辑与底层原理。
2.2密码学基础:加密算法的两大体系
爬虫合规的核心是 “身份认证”,而身份认证的底层是加密算法 —— 不同场景下的算法选择,决定了认证的安全性与合规性。
1.国际通用加密算法体系
国际算法是互联网场景的主流选择,核心包括三类关键算法:
算法类型 | 代表算法 | 核心用途 | 特点 |
非对称加密 / 签名 | ED25519、RSA、ECDSA | 身份认证、数字签名 | 公私钥分离,私钥签名、公钥验签,安全性高 |
哈希 / 摘要 | SHA256、SHA3 | 数据防篡改、指纹生成 | 不可逆,相同输入必出相同输出,微小改动输出完全不同 |
对称加密 | AES、DES | 数据加密传输 | 加解密用同一密钥,速度快,适合大量数据加密加解密用同一密钥,速度快,适合大量数据加密 |
其中,ED25519 是椭圆曲线签名算法(ECDSA)的优化版本,以 “高效、轻量、安全” 成为 API 认证的首选 —— 和风天气的 JWT Token 认证,正是基于 ED25519 实现。
2.国密算法(SM 系列):自主可控的密码体系
国密算法(SM1/SM2/SM3/SM4)是我国自主设计的密码学体系,与国际算法无 “基础 / 兼容” 关系,是政务、金融等敏感领域的强制标准:

3.算法选择的核心逻辑
通用互联网场景(如天气数据爬取):优先选择 ED25519/SHA256,兼容性好、开发成本低;
敏感领域(政务 / 金融):必须使用国密算法,符合国家密码安全规范;
核心原则:算法本身无 “优劣”,但需匹配场景的合规要求。
2.3 合规核心:公私钥与 Token 的作用机制
爬虫合规的本质是 “向目标平台证明‘你是你’”,而公私钥 + Token 是实现这一目标的核心工具,二者分工明确、形成闭环。
1.公私钥:非对称加密的 “黄金搭档”
公私钥由开发者本地生成(如通过 Shell 命令),是身份认证的 “核心凭证”:
# 生成ED25519私钥(PEM格式) openssl genpkey -algorithm ED25519 -out ed25519-private.pem # 从私钥导出公钥(用于上传至平台) openssl pkey -in ed25519-private.pem -pubout -out ed25519-public.pem |
公私钥的说明:
密钥类型 | 归属方 | 核心作用 | 安全要求 |
私钥 | 开发者本地 | 生成 Token 的数字签名(相当于 “私人印章”) | 绝对保密,仅本地存储,不传输、不上传 |
公钥 | 目标平台(如和风天气) | 验证 Token 签名的真伪(相当于 “印章防伪模板”) | 可公开,上传至平台并绑定项目,用于验签 |
2.Token:临时的 “身份通行证”
Token(如 JWT Token)是基于私钥 + 项目信息生成的临时凭证,核心价值是 “替代敏感凭证传输”:
① 生成逻辑:私钥 + 项目 ID + KID(公钥标识) → 加密生成 Token(含有效期、权限范围);
② 核心作用:
l临时有效:通常设置 1-24 小时有效期,即使泄露也可控;
l权限隔离:仅能调用项目开通的 API(如实时天气、7 天预报);
l安全传输:Token 加密生成,无法反向推导私钥 / 项目 ID;
③ 与公私钥的关系:Token 由私钥生成,平台用公钥验证 Token 合法性,形成 “签名 - 验签” 的认证闭环。
3.关键澄清:PEM 文件的本质
开发者生成的ed25519-private.pem文件虽是文本格式(可记事本打开),但并非普通文本:
l内容是 ED25519 私钥的二进制数据经 Base64 编码后的文本,需通过cryptography库按 ED25519 算法解析;
l操作系统仅能查看编码后的字符,只有解析后才能生成可用的私钥对象,用于 Token 签名。
我们在cmd终端上可以查看产生的公钥、私钥:

也就是说公钥、私钥文件是以.pem结尾的文本文件,尽管可以查看内容,但却是特殊格式的文件,必须经过ED25519 算法解析才能知道其含义。
2.4 实战落地:和风天气的合规爬取流程
和风天气是 “合规爬虫” 的典型场景 —— 平台开放免费 API,要求开发者完成身份备案、凭证绑定,才能合法获取数据,完整流程如下:
1. 合规前提:平台备案与凭证获取
步骤 1:注册开发者账号
访问和风天气开发者平台(https://dev.qweather.com/),完成手机号 / 邮箱注册,建立基础身份关联。
步骤 2:创建项目并明确权限
在控制台 “项目管理” 中创建项目,选择 “天气 API” 权限(如实时天气、7 天预报),平台分配Project ID(项目唯一标识)。
步骤 3:上传公钥并绑定身份
将本地生成的 ED25519 公钥上传至项目,平台分配KID(公钥唯一标识)—— 这是项目具备 API 调用权限的核心前提(公钥不上传,项目仅为 “空项目”)。
核心凭证清单(4 个)

2. 技术实现:Token 生成与数据爬取

代码核心解析
l私钥加载:cryptography库解析 PEM 格式私钥,验证 ED25519 算法,生成可用的私钥对象;
lToken 生成:私钥对项目信息签名,生成带有效期的 JWT Token;
lAPI 请求:携带 Token 调用 API,平台用公钥验证 Token 合法性,返回数据;
l容错处理:使用dict.get()避免 KeyError,提升代码健壮性。
3.合规性的核心保障
遵循 Robots 协议:和风天气robots.txt仅禁止/terms///about/等静态页面,API 路径完全开放;
身份可追溯:项目 ID+KID 绑定开发者身份,平台可追溯每一次 API 调用;
频率可控:免费版 API 有每日调用次数限制,避免服务器过载;
数据合规:平台提供的气象数据来源合法,非商用场景无法律风险。
2.5 爬虫合规的核心逻辑总结
加密算法是基础:ED25519 等国际算法适配通用场景,国密算法适配敏感场景,选择需匹配合规要求;
公私钥是核心:私钥本地签名生成 Token,公钥上传平台验签,形成 “身份认证闭环”;
Token 是桥梁:替代敏感凭证传输,兼顾安全性与便捷性;
合规的本质:不是 “技术能爬”,而是 “平台认可”—— 通过备案、凭证绑定、Token 认证,让爬取行为处于平台的可控范围。
2.6 延伸思考:合规爬虫 vs 反爬网站
l合规爬虫(如和风天气):按平台规则实现,代码稳定、无法律风险,核心是 “理解认证规范”;
l反爬网站(如电商 / 资讯平台):需突破验证码、IP 封禁、JS 加密等反爬措施,代码维护成本高,且有法律风险。
学习爬虫的最优路径是从 “合规场景” 入手,理解加密算法、身份认证、API 调用的核心逻辑,再逐步探索复杂场景 —— 既符合法律规范,也能夯实技术基础。
三、小结
对于python的爬虫技术,我们已经输出了多篇文章,从不同角度去理解这项技术及面临的合规性问题。
爬虫的价值不在于 “突破限制”,而在于 “合法高效地获取数据”。本文以和风天气为例,从密码学基础到合规流程,完整拆解了 “加密算法 - 公私钥 - Token - 合规爬取” 的全链路逻辑,核心是让开发者理解:技术实现的前提是合规,而合规的底层是完善的身份认证体系。无论是国际算法还是国密算法,无论是公私钥还是 Token,最终都是为了在 “数据获取” 与 “平台保护” 之间找到平衡,这也是爬虫技术可持续发展的核心。
让我们保持学习热情,多做练习。我们下期再见!