Agent Skills
返回列表
湖北水雨情查询

湖北水雨情查询

知识管理 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_b79d7c34/hbsyq。

技能介绍

解决什么问题

很多政务或水文查询页面前端是 SPA(常见于 uniapp 或 Vue),页面上明明有数据表格,用常规抓取却只能拿到空壳。原因很简单:真实数据不在 HTML 里,而是藏在浏览器背后调用的 API(通常是 .asmx 或 /api/)中,且这些接口往往没有公开文档。

此外,这类站点经常还在用旧版 TLS 或自签名证书,直接发起请求会在握手阶段失败。本技能不是“把网页转成文字”,而是专门用于解析 SPA 背后的结构化接口,并已内置针对湖北水文站点的可用方案。

核心能力与工作方式

通用逆向流程(适用于新站点):

  1. 处理 TLS:统一通过 scripts/read_hbwater.py 中的 make_session() 发起请求,而不是裸调 requests.get。
  2. 抓取入口 HTML:收集 <script src=...>,定位 /static/js/ 下的主 bundle。
  3. 找到路由到 chunk 的映射:在 index.{hash}.js 中匹配类似 pages-xxx 与 8 位哈希的键值对。
  4. 下载页面 chunk:例如雨量页面对应的 pages-rain-fbt.{hash}.js,在其中搜索 .asmx/、/api/、url: 等关键字,连带读取周边约 150 字符的上下文来确定参数名与取值。
  5. 确定后端 origin:优先测试站点自身是否就是反向代理,再尝试 chunk 中出现的域名。
  6. 逐个探测参数:若返回 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 限制。