# 解决传统天气API失效办法——爬取完整页面再提取数据 - Rainmeter技术教程 - 雨滴社区 - Powered by Discuz!
 找回密码
 点击注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3211|回复: 7

[技术交流] 解决传统天气API失效办法——爬取完整页面再提取数据

[复制链接]

签到天数: 23 天

[LV.4]偶尔看看III

 楼主| 发表于 2021-8-7 09:16:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?点击注册

x
本帖最后由 小流星 于 2021-8-7 10:00 编辑

如题,现在稳定免费无需注册只需一个HTTP链接即可查询指定城市天气的WebAPI已经绝迹了,最好的办法是爬取整个HTML页面再分析页面内容,用正则表达式提取数据,这种方法非常稳,基本不会失效,除非网站布局改变需要修改正则表达式。
以weather.com为例:
打开官方网站搜索某一城市天气,地址栏会变成https://weather.com/weather/today/l/xxxxxx...xxxxxxx字样,最后的那段xxx代表查询参数,记下这个就行。
然后右键点击显示的温度或者天气,在弹出菜单上选择Inspect/查看元素,就能找出负责显示温度天气的HTML部分,分析这部分HTML就能发现有两个部分是需要的数据:图中红线部分,一个是温度(华氏度85),一个是天气描述Fair。

查找对应HTML

查找对应HTML

也就是说整个网页里,需要的HTML只是这一部分:
  1. <div class="CurrentConditions--primary--39Y3f"><span data-testid="TemperatureValue" class="CurrentConditions--tempValue--1RYJJ">85°</span><div data-testid="wxPhrase" class="CurrentConditions--phraseValue--17s79">Fair</div></div>
复制代码
据此可编写一个简单的正则表达式,为了以防万一class类名中的"39Y3f, 1RYJJ, 17s79"字样会随着访问者或者访问时间不同而发生变化,在正则表达式里这一块不写死,用\w+代替,需要的数据部分加上( )用分组捕获,放到Rainmeter的ini文件里则写成:
  1. RegExp="(?siU).*<div class="CurrentConditions--primary--\w+"><span data-testid="TemperatureValue" class="CurrentConditions--tempValue--\w+">(\d+)°</span><div data-testid="wxPhrase" class="CurrentConditions--phraseValue--\w+">(.+)</div>.*"
复制代码
Rainmeteor执行之后会返回两个捕获到的分组StringIndex1和StringIndex2,分别代表华氏温度和天气描述。华氏温度转摄氏度需要用Rainmeter给的Formulas语法做一次运算。
参考文档:
https://docs.rainmeter.net/tips/webparser-lookahead-assertions-in-regexp/
https://docs.rainmeter.net/manual/formulas/
注:weather.com网站页面复杂,解析一次需要花上些时间,需要快速得到天气数据的可以解析中国天气网http://www.weather.com.cn/,同样是显示当天天气,中国天气网的页面体积70KB,而weather.com传输140KB,原始880KB。


评分

参与人数 1心动值 +1 活跃值 +20 技术值 +1 收起 理由
萝莉头 + 1 + 20 + 1 童鞋我要表扬你( ノ^ω^)ノ

查看全部评分

回复

使用道具 举报

签到天数: 23 天

[LV.4]偶尔看看III

 楼主| 发表于 2021-8-7 09:22:18 | 显示全部楼层
本帖最后由 小流星 于 2021-8-7 10:12 编辑

目前在做一个示例皮肤,以Harmo Clock皮肤为基础,修改它的天气功能
https://bbs.rainmeter.cn/thread-290755-1-1.html

回复

使用道具 举报

签到天数: 2 天

[LV.1]初来乍到

发表于 2021-8-8 18:28:36 | 显示全部楼层
好东西谢谢分享
回复

使用道具 举报

签到天数: 19 天

[LV.4]偶尔看看III

发表于 2021-8-10 10:32:19 | 显示全部楼层
手残党,等大佬分享
回复

使用道具 举报

签到天数: 21 天

[LV.4]偶尔看看III

发表于 2022-3-19 14:41:44 | 显示全部楼层
感谢大佬分享资源和技术
回复

使用道具 举报

签到天数: 3 天

[LV.2]偶尔看看I

发表于 2022-3-24 10:31:05 | 显示全部楼层

辛苦了·感谢分享~~~
回复

使用道具 举报

签到天数: 21 天

[LV.4]偶尔看看III

发表于 2022-4-15 21:34:59 | 显示全部楼层
万分感谢大佬分享
回复

使用道具 举报

签到天数: 459 天

[LV.9]以坛为家II

发表于 2023-4-25 15:26:13 | 显示全部楼层
学习学习。感谢楼主
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点击注册

本版积分规则

快速回复 返回顶部 返回列表