不购买 API 获取天气的办法

5 条回复
107 次浏览

https://2libra.com/post/product-updates/ATEJpyc
站长已经上线了基于 MET Norway 的天气徽章
我这里提供一种爬虫的境内方法(需要自行获得 cityID)

https://www.weather.com.cn/
打开网站抓包一下
image
北京天气其实就在这个地址
https://d1.weather.com.cn/weather_index/101010100.html?_=1793167886767
数字是 cityID 去掉 CN
image
就像这样,然后加上 referer 和 UA 去访问上面的地址,不加的话会 403 Forbidden

请求后会得到一堆 JS 变量

复制
var cityDZ = {
    "weatherinfo": {
        "city": "北京",
        "cityname": "beijing",
        "temp": "9",
        "tempn": "10",
        "weather": "多云",
        "wd": "南风转西北风",
        "ws": "<3 级",
        "weathercode": "d1",
        "weathercoden": "n1",
        "fctime": "202610280800"
    }
};
var alarmDZ = {
    "w": []
};
var dataSK = {
    "nameen": "beijing",
    "cityname": "北京",
    "city": "101010100",
    "temp": "15.6",
    "tempf": "60.1",
    "WD": "西南风",
    "wde": "SW",
    "WS": "2 级",
    "wse": "10km\/h",
    "SD": "35%",
    "sd": "35%",
    "qy": "1015",
    "njd": "15km",
    "time": "13:40",
    "rain": "0",
    "rain24h": "0",
    "aqi": "54",
    "aqi_pm25": "54",
    "weather": "晴",
    "weathere": "Sunny",
    "weathercode": "d00",
    "limitnumber": "2 和 7",
    "date": "10 月 28 日(星期三)"
};
var dataZS = {
    "zs": {
        "date": "2026102811",
        "lk_name": "路况指数",
        "lk_hint": "干燥",
        "lk_des_s": "天气较好,路面较干燥,路况较好。",
        "cl_name": "晨练指数",
        "cl_hint": "适宜",
        "cl_des_s": "天气不错,空气清新。",
        "gj_name": "逛街指数",
        "gj_hint": "适宜",
        "gj_des_s": "这种好天气去逛街可使身心畅快放松。",
        "pl_name": "空气污染扩散条件指数",
        "pl_hint": "中",
        "pl_des_s": "易感人群应适当减少室外活动。",
        "co_name": "舒适度指数",
        "co_hint": "较舒适",
        "co_des_s": "白天晴,早晚偏凉,午后舒适。",
        "pj_name": "啤酒指数",
        "pj_hint": "较不适宜",
        "pj_des_s": "有些凉意,少量饮用常温啤酒。",
        "hc_name": "划船指数",
        "hc_hint": "适宜",
        "hc_des_s": "天气较好,适宜划船及嬉玩水上运动。",
        "gl_name": "太阳镜指数",
        "gl_hint": "必要",
        "gl_des_s": "建议佩戴透射比为 1 级的浅色太阳镜",
        "uv_name": "紫外线强度指数",
        "uv_hint": "中等",
        "uv_des_s": "涂擦 SPF 大于 15、PA+防晒护肤品。",
        "wc_name": "风寒指数",
        "wc_hint": "无",
        "wc_des_s": "温度未达到风寒所需的低温,稍作防寒准备即可。",
        "ct_name": "穿衣指数",
        "ct_hint": "较冷",
        "ct_des_s": "建议着厚外套加毛衣等服装。",
        "pk_name": "放风筝指数",
        "pk_hint": "较适宜",
        "pk_des_s": "温暖舒适,较适宜放风筝。",
        "ac_name": "空调开启指数",
        "ac_hint": "较少开启",
        "ac_des_s": "体感舒适,不需要开启空调。",
        "dy_name": "钓鱼指数",
        "dy_hint": "适宜",
        "dy_des_s": "适宜垂钓,愿您度过愉快垂钓时光。",
        "ls_name": "晾晒指数",
        "ls_hint": "适宜",
        "ls_des_s": "天气不错,抓紧时机让衣物晒太阳吧。",
        "gm_name": "感冒指数",
        "gm_hint": "少发",
        "gm_des_s": "无明显降温,感冒几率较低。",
        "xc_name": "洗车指数",
        "xc_hint": "适宜",
        "xc_des_s": "天气较好,适合擦洗汽车。",
        "tr_name": "旅游指数",
        "tr_hint": "适宜",
        "tr_des_s": "天气较好,丝毫不会影响您出行的心情。",
        "nl_name": "夜生活指数",
        "nl_hint": "较适宜",
        "nl_des_s": "只要您稍作准备就可以放心外出。",
        "xq_name": "心情指数",
        "xq_hint": "较好",
        "xq_des_s": "温度适宜,心情会不错。",
        "yh_name": "约会指数",
        "yh_hint": "较适宜",
        "yh_des_s": "不用担心天气来调皮捣乱而影响了兴致。",
        "yd_name": "运动指数",
        "yd_hint": "较适宜",
        "yd_des_s": "天气凉,在户外运动请注意增减衣物。",
        "ag_name": "过敏指数",
        "ag_hint": "不易发",
        "ag_des_s": "除特殊体质,无需担心过敏问题。",
        "mf_name": "美发指数",
        "mf_hint": "适宜",
        "mf_des_s": "建议选择含防晒滋润成分的护发品。",
        "ys_name": "雨伞指数",
        "ys_hint": "不带伞",
        "ys_des_s": "天气较好,不用带雨伞。",
        "fs_name": "防晒指数",
        "fs_hint": "中等",
        "fs_des_s": "适合涂擦 SPF 大于 15,PA+护肤品。",
        "pp_name": "化妆指数",
        "pp_hint": "保湿",
        "pp_des_s": "请选用中性保湿型霜类化妆品。",
        "zs_name": "中暑指数",
        "zs_hint": "无中暑风险",
        "zs_des_s": "天气舒适,对易中暑人群来说非常友善。",
        "jt_name": "交通指数",
        "jt_hint": "良好",
        "jt_des_s": "气象条件良好,车辆可以正常行驶。",
        "gz_name": "干燥指数",
        "gz_hint": "适宜",
        "gz_des_s": "温湿条件适宜,风速不大,皮肤无需特殊保养,只做日常护理即可。"
    },
    "cn": "北京"
};
var fc = {
    "f": [{
        "fa": "01",
        "fb": "01",
        "fc": "15",
        "fd": "5",
        "fe": "南风",
        "ff": "西北风",
        "fg": "<3 级",
        "fh": "<3 级",
        "fk": "4",
        "fl": "7",
        "fm": "85.7",
        "fn": "30.6",
        "fi": "10\/28",
        "fj": "今天"
    }, {
        "fa": "00",
        "fb": "00",
        "fc": "19",
        "fd": "6",
        "fe": "西南风",
        "ff": "西风",
        "fg": "<3 级",
        "fh": "<3 级",
        "fk": "5",
        "fl": "6",
        "fm": "70.5",
        "fn": "18.6",
        "fi": "10\/29",
        "fj": "星期四"
    }, {
        "fa": "00",
        "fb": "00",
        "fc": "20",
        "fd": "5",
        "fe": "北风",
        "ff": "东北风",
        "fg": "<3 级",
        "fh": "<3 级",
        "fk": "8",
        "fl": "1",
        "fm": "84",
        "fn": "16.8",
        "fi": "10\/30",
        "fj": "星期五"
    }, {
        "fa": "01",
        "fb": "02",
        "fc": "14",
        "fd": "5",
        "fe": "东北风",
        "ff": "西北风",
        "fg": "<3 级",
        "fh": "<3 级",
        "fk": "1",
        "fl": "7",
        "fm": "98",
        "fn": "41.6",
        "fi": "10\/31",
        "fj": "星期六"
    }, {
        "fa": "00",
        "fb": "00",
        "fc": "15",
        "fd": "2",
        "fe": "西北风",
        "ff": "东风",
        "fg": "<3 级",
        "fh": "<3 级",
        "fk": "7",
        "fl": "2",
        "fm": "56.6",
        "fn": "21",
        "fi": "11\/1",
        "fj": "星期日"
    }]
}

直接载入到 JS 引擎可以直接用,也可以学我用万能的正则表达式(有点抽象)
image

image
上面的地址会返回很多字段,可以结合网页自己看是什么意思。

❤️2
👍2
400
前排打手
OP
GRD

cunning 爬虫可不保证稳定(但是我用了几年了都没问题,学生时代一块钱掰成两半花,买 API 不如爬数据)

前排打手
OP
GRD

@Jimmy 看你发的帖子,才知道还有这种免费的好东西,但是跨境的话,我不是很能接受,因为要做请求重试,还有延迟问题,所以我自己还是用这一套爬虫的。

前端抓数据好像不能跨域,提供给用户又不要上传数据,确实有点麻烦,这个只是提供给大家一种自己开发小工具要嵌入天气数据的时候的获取方法,你的场景不太符合需求。

展开 1 条评论

发表一个评论

R保持