爬虫系列实战:使用json解析天气数据

发布时间:2024年01月17日

大家好,爬虫是一项非常抢手的技能,收集、分析和清洗数据是数据科学项目中最重要的部分,本文介绍使用json解析气象局天气数据。

在官网上获取天气数据信息,可以定义当前查询的位置,提取时间、温度、湿度、气压、风速等信息,并导入requests、matplotlib这些需要用到的库。

# 导入以下模块
import requests
import matplotlib.pyplot as plt
import pylab as pl

1.获取今日天气

调用api接口地址,获取天气数据接口,本文获取57494代表武汉的数据接口,进而获取json数据,并判断json请求是否成功。

def get_weather():
    # 调用api接口地址
    # 获取57494代表武汉的天气数据接口
    url = "https://weather.cma.cn/api/now/57494"

# 获取json数据
    json_datas = requests.get(url=url).json()
    #判断json请求是否成功?
    if json_datas.get("msg") == "success":
        # 请求成功
        json_location = json_datas.get("data").get("location")
        # 位置信息
        print('\n', '当前查询的位置'.center(50, '—'))
        print("城市代码: " + json_location.get("id") + "   城市名称: " + json_location.get("name") +"   详细地址: " + json_location.get("path"));
        # 当天天气信息
        json_now_data = json_datas.get("data").get("now")

        # 获取最新发布时间
        now_time = "最新天气发布时间:" + str(json_datas.get("data").get("lastUpdate"))
        print('\n',now_time.center(50, '—'))
        print("\n温度: " + str(json_now_data.get("temperature")) + "   气压: " + str(json_now_data.get("pressure")) +"  湿度: " + str(json_now_data.get("humidity")))
        print("\n风向: " + json_now_data.get("windDirection") + "   风力等级: " + json_now_data.get("windScale"))

    else:
        # 提示失败
        print("服务器返回的数据,失败了!")

2.可视化显示温度曲线

解析json数据,获取历史最大和最小的温度数据,进行图表绘制,可视化展示温度数据,使用绘图库输出可视化结果。

def get_Max_temperature():
    url = "https://weather.cma.cn/api/climate"
    # 1传数据参数
    params = {
                "stationid": 57494
            }
    # 2.获取json数据
    json_datas= requests.get(url=url, params=params).json()
    #print(json_datas)
    # 3.解析json数据,图表绘制
    data=json_datas.get("data").get("data")
    x = range(1, 13, 1) #显示12个月
    # 4.获取最大和最小的温度数据
    y = [maxTemp.get("maxTemp") for maxTemp in data]
    
    y1 = [minTemp.get("minTemp") for minTemp in data]

    pl.rcParams["font.sans-serif"] = ["SimHei"]
    plt.figure(figsize=(70, 70), dpi=100)
    plt.plot(x, y)
    plt.plot(x, y1)
    plt.xticks(x, ["{}月".format(i) for i in x])
    plt.title("1981年-2010年月平均气温和降水")
    plt.show()


if __name__ == "__main__":
    get_weather()

    get_Max_temperature()
    print('数据获取完成!!!')

文章来源:https://blog.csdn.net/csdn1561168266/article/details/135662227
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。