- UID
- 526694
- 主题
- 注册时间
- 2018-7-21
- 在线时间
- 小时
- 最后登录
- 1970-1-1
签到天数: 23 天 [LV.4]偶尔看看III
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?点击注册
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只是这一部分:
- <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文件里则写成:
- 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 |
童鞋我要表扬你( ノ^ω^)ノ |
查看全部评分
|