湖北水雨情查询
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_b79d7c34/hbsyq。
技能介绍
解决什么问题
很多政务或水文查询页面前端是 SPA(常见于 uniapp 或 Vue),页面上明明有数据表格,用常规抓取却只能拿到空壳。原因很简单:真实数据不在 HTML 里,而是藏在浏览器背后调用的 API(通常是 .asmx 或 /api/)中,且这些接口往往没有公开文档。
此外,这类站点经常还在用旧版 TLS 或自签名证书,直接发起请求会在握手阶段失败。本技能不是“把网页转成文字”,而是专门用于解析 SPA 背后的结构化接口,并已内置针对湖北水文站点的可用方案。
核心能力与工作方式
通用逆向流程(适用于新站点):
- 处理 TLS:统一通过
scripts/read_hbwater.py中的make_session()发起请求,而不是裸调requests.get。 - 抓取入口 HTML:收集
<script src=...>,定位/static/js/下的主 bundle。 - 找到路由到 chunk 的映射:在
index.{hash}.js中匹配类似pages-xxx与 8 位哈希的键值对。 - 下载页面 chunk:例如雨量页面对应的
pages-rain-fbt.{hash}.js,在其中搜索.asmx/、/api/、url:等关键字,连带读取周边约 150 字符的上下文来确定参数名与取值。 - 确定后端 origin:优先测试站点自身是否就是反向代理,再尝试 chunk 中出现的域名。
- 逐个探测参数:若返回 500 且提示“参数错误”而非 404,说明路径正确;继续尝试参数组合直到拿到有效 JSON。
湖北站点(已打通):
无需重复推导,直接使用 scripts/read_hbwater.py。关键细节:
Get_Real_Rain:返回“真正的今日雨量”,时间窗为 08:00 到当前时刻。productRainData的dataIndex=5是 滚动 24 小时窗口,不能直接标注为“今天”。Get_YL_Fbt:按时段拉取有雨的站点;城市过滤请依赖loc字段,city/xian字段常为占位值。- 荆门
addvcd = 420800,水文日界为 08:00。
适用边界与注意点
- 只读取公开 H5 数据,不涉及微信 API 凭证。
- 站点可能返回
429,应避免对多个端点做高频连续探测。 - 始终抑制
urllib3的 TLS 警告。 - 若只是需要阅读普通文章正文,请使用
WebFetch;本技能面向 SPA 背后的结构化数据。
如需扩展到水位、土壤、预警等页面,可复用同一套 chunk 逆向流程,将新的 .asmx 端点记录到 references/hbwater_endpoints.md。
使用场景
- 用户粘贴形如 .../hb_wechat/#/ 的 H5 链接,需要提取页面里的实时雨量站点列表并按城市过滤。
- 需要获取湖北某地“今日 08:00 至今”的降雨量,而非滚动 24 小时窗口的历史累计值。
- 站点证书过期或自签名,直接请求握手失败,需要用兼容 TLS 的助手重新拉取数据。
- 分析某个 Vue SPA 的前端路由,找出页面背后隐藏的 .asmx 接口及其调用参数。
适合人员
- 数据分析工程师:需要从湖北政务水文站采集公开的降雨、水位数据,用于后续分析和可视化展示。
- 后端开发者:希望复用这套 SPA 逆向方法,将 H5 背后的结构化数据接口接入自己的 Python 服务。
- GIS 或农业气象产品负责人:需要按地区拉取降雨、站点等信息,构建水雨情地图或预警看板。
- 数据采集与爬虫工程师:需要稳定读取旧 TLS 站点背后的 WebService,避免频繁被 429 限制。