You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Node-RED环境下从HTML提取suncalc网站方位角与高度角字段问题

解决方案

最优方案:本地计算替代网页爬取

suncalc的太阳高度角、方位角计算逻辑完全开源,你不需要通过爬取网页获取数据,直接在Node-RED内本地计算即可,稳定性远高于爬取第三方站点:

  • 安装node-red-contrib-sun-position节点,直接输入你需要的经纬度、时间参数,即可直接输出azimuth、altitude数值,无需发送外部请求
  • 也可以在函数节点中直接引入suncalc npm包,手动调用计算方法,示例代码如下:
const SunCalc = global.get('suncalc');
// 对应你URL中的经纬度、时间参数
const lat = 48.85826;
const lon = 2.29451;
const time = new Date('2021-09-23T16:40:00+02:00'); // 注意时区匹配
const sunPos = SunCalc.getPosition(time, lat, lon);
msg.payload = {
    altitude: sunPos.altitude * 180 / Math.PI, // 弧度转角度
    azimuth: (sunPos.azimuth * 180 / Math.PI + 180) % 360 // 弧度转角度,调整为正北为0的方位角
};
return msg;

替代方案:调整网页爬取逻辑

如果你确实需要爬取suncalc网页的展示数据,需要修复现有流程的两个核心问题:

  1. 原始HTML无渲染数据:你当前的HTTP请求拿到的是未执行JS的静态HTML,太阳角度数据是客户端JS运行后计算生成的,静态HTML中不存在对应数值。你需要替换现有HTTP请求节点为node-red-contrib-puppeteer类的无头浏览器节点,等待页面JS执行完成后再提取内容。
  2. HTML解析节点配置错误:现有HTML节点配置不匹配提取需求,调整参数如下:
  • 提取选择器分别设置为#azimuth .Bold(方位角)、#altitude .Bold(高度角)
  • 返回类型从attr修改为text,即可读取元素内的数值文本
  • 如果需要同时提取两个数值,可以将返回格式设置为array,分别对应两个角度的数值

调整后的流程片段参考:

[{"id":"b5b2b310.4dfc5","type":"inject","z":"c275914f.48426","name":"触发","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":"","topic":"","payload":"","payloadType":"date","x":180,"y":180,"wires":[["puppeteer-node-id"]]},{"id":"puppeteer-node-id","type":"puppeteer-page","z":"c275914f.48426","name":"加载suncalc页面","url":"https://suncalc.org/#/48.85826,2.29451,17/2021.09.23/16:40/324.0/2","timeout":"3000","waitFor":"#azimuth .Bold","x":350,"y":180,"wires":[["a8ff0654.6ac8d"]]},{"id":"a8ff0654.6ac8d","type":"html","z":"c275914f.48426","name":"提取角度数值","property":"payload.content","outproperty":"payload","tag":"#azimuth .Bold, #altitude .Bold","ret":"text","as":"array","x":530,"y":180,"wires":[["984182c2.bb29e8"]]},{"id":"984182c2.bb29e8","type":"debug","z":"c275914f.48426","name":"输出结果","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":710,"y":180,"wires":[]}]

内容的提问来源于stack exchange,提问作者Mirza Ahsan Baig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 19:45:04