当前位置:首页>python>合法爬虫全攻略:Python、公私钥、Token与天气数据的完美邂逅

合法爬虫全攻略:Python、公私钥、Token与天气数据的完美邂逅

  • 2026-09-10 13:57:07
合法爬虫全攻略:Python、公私钥、Token与天气数据的完美邂逅

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,最终都是为了在 “数据获取” 与 “平台保护” 之间找到平衡,这也是爬虫技术可持续发展的核心。

让我们保持学习热情,多做练习。我们下期再见!

最新文章

随机文章