Python从网络接口爬取json天气预报数据绘制高温低温双折线图

实现一个功能,从网络上的天气预报接口读取天气预报中的json数据,json数据中包含高温和低温以及日期,然后把日期作为横坐标,高温和低温分别做两条折线绘制在同一张图上。
第一步,需要从网路接口中读取json天气预报数据并解析json中包含的高温、低温数据以及对应的日期。本例中的天气预报json数据接口:http://t.weather.sojson.com/api/weather/city/101270101
读出来的json数据格式如下所示:

{"time": "2019-03-13 13:13:28","cityInfo": {"city": "成都市","cityId": "101270101","parent": "四川","updateTime": "12:39"},"date": "20190313","message": "Success !","status": 200,"data": {"shidu": "64%","pm25": 83.0,"pm10": 139.0,"quality": "轻度污染","wendu": "14","ganmao": "儿童、老年人及心脏、呼吸系统疾病患者人群应减少长时间或高强度户外锻炼","yesterday": {"date": "12","sunrise": "07:20","high": "高温 17.0℃","low": "低温 11.0℃","sunset": "19:09","aqi": 114.0,"ymd": "2019-03-12","week": "星期二","fx": "无持续风向","fl": "<3级","type": "阵雨","notice": "阵雨来袭,出门记得带伞"},"forecast": [{"date": "13","sunrise": "07:19","high": "高温 17.0℃","low": "低温 11.0℃","sunset": "19:10","aqi": 110.0,"ymd": "2019-03-13","week": "星期三","fx": "无持续风向","fl": "<3级","type": "阵雨","notice": "阵雨来袭,出门记得带伞"}, {"date": "14","sunrise": "07:17","high": "高温 18.0℃","low": "低温 11.0℃","sunset": "19:11","aqi": 58.0,"ymd": "2019-03-14","week": "星期四","fx": "无持续风向","fl": "<3级","type": "多云","notice": "阴晴之间,谨防紫外线侵扰"}, {"date": "15","sunrise": "07:16","high": "高温 14.0℃","low": "低温 9.0℃","sunset": "19:11","aqi": 66.0,"ymd": "2019-03-15","week": "星期五","fx": "无持续风向","fl": "<3级","type": "小雨","notice": "雨虽小,注意保暖别感冒"}, {"date": "16","sunrise": "07:15","high": "高温 12.0℃","low": "低温 10.0℃","sunset": "19:12","aqi": 52.0,"ymd": "2019-03-16","week": "星期六","fx": "无持续风向","fl": "<3级","type": "小雨","notice": "雨虽小,注意保暖别感冒"}, {"date": "17","sunrise": "07:14","high": "高温 14.0℃","low": "低温 10.0℃","sunset": "19:13","aqi": 65.0,"ymd": "2019-03-17","week": "星期日","fx": "无持续风向","fl": "<3级","type": "小雨","notice": "雨虽小,注意保暖别感冒"}, {"date": "18","sunrise": "07:13","high": "高温 15.0℃","low": "低温 11.0℃","sunset": "19:13","aqi": 69.0,"ymd": "2019-03-18","week": "星期一","fx": "无持续风向","fl": "<3级","type": "多云","notice": "阴晴之间,谨防紫外线侵扰"}, {"date": "19","sunrise": "07:11","high": "高温 14.0℃","low": "低温 9.0℃","sunset": "19:14","ymd": "2019-03-19","week": "星期二","fx": "无持续风向","fl": "<3级","type": "小雨","notice": "雨虽小,注意保暖别感冒"}, {"date": "20","sunrise": "07:10","high": "高温 17.0℃","low": "低温 6.0℃","sunset": "19:15","ymd": "2019-03-20","week": "星期三","fx": "东北风","fl": "<3级","type": "阴","notice": "不要被阴云遮挡住好心情"}, {"date": "21","sunrise": "07:09","high": "高温 17.0℃","low": "低温 7.0℃","sunset": "19:15","ymd": "2019-03-21","week": "星期四","fx": "东南风","fl": "<3级","type": "阴","notice": "不要被阴云遮挡住好心情"}, {"date": "22","sunrise": "07:08","high": "高温 18.0℃","low": "低温 10.0℃","sunset": "19:16","ymd": "2019-03-22","week": "星期五","fx": "东风","fl": "<3级","type": "小雨","notice": "雨虽小,注意保暖别感冒"}, {"date": "23","sunrise": "07:06","high": "高温 21.0℃","low": "低温 11.0℃","sunset": "19:16","ymd": "2019-03-23","week": "星期六","fx": "东南风","fl": "<3级","type": "多云","notice": "阴晴之间,谨防紫外线侵扰"}, {"date": "24","sunrise": "07:05","high": "高温 19.0℃","low": "低温 12.0℃","sunset": "19:17","ymd": "2019-03-24","week": "星期日","fx": "东北风","fl": "<3级","type": "小雨","notice": "雨虽小,注意保暖别感冒"}, {"date": "25","sunrise": "07:04","high": "高温 18.0℃","low": "低温 12.0℃","sunset": "19:18","ymd": "2019-03-25","week": "星期一","fx": "东北风","fl": "<3级","type": "小雨","notice": "雨虽小,注意保暖别感冒"}, {"date": "26","sunrise": "07:03","high": "高温 20.0℃","low": "低温 12.0℃","sunset": "19:18","ymd": "2019-03-26","week": "星期二","fx": "东风","fl": "<3级","type": "小雨","notice": "雨虽小,注意保暖别感冒"}, {"date": "27","sunrise": "07:02","high": "高温 20.0℃","low": "低温 13.0℃","sunset": "19:19","ymd": "2019-03-27","week": "星期三","fx": "东南风","fl": "<3级","type": "阴","notice": "不要被阴云遮挡住好心情"}]}
}

第二步,高温,低温,日期数据具备后,开始绘制折线图。
程序代码如下所示:

import json
import urllib.request
import matplotlib
from matplotlib import pyplot as plt
from datetime import datetimedef get_weather_json_data():#101270101,天气预报中成都的代码。url = "http://t.weather.sojson.com/api/weather/city/101270101"response = urllib.request.urlopen(url)content = response.read().decode('utf-8')return contentdef get_forecast_data(content):data = content["data"]return data["forecast"]#清洗数据。过滤℃
def get_pure_temperature(temp):a, b = temp.split()return b.strip().strip("℃")def make_chart(high, low, date_time):matplotlib.rc('font', family='SimHei', weight='bold')plt.rcParams['axes.unicode_minus'] = Falsex = range(len(date_time))plt.plot(x, low, ms=10,marker='*', color='blue', alpha=0.5, label="低温")plt.plot(x, high, ms=10,marker='o', color='red', alpha=0.5, label="高温")plt.fill_between(x, low, high, facecolor='gray', alpha=0.1)plt.title("2019年3月 - 温度变化", fontsize=15)plt.xticks(x, date_time, rotation=20)plt.xlabel('日期')plt.ylabel('温度')plt.grid()  # 显示网格plt.legend()plt.show()content = json.loads(get_weather_json_data())
data = get_forecast_data(content)high, low, date_time = [], [], []
for obj in data:h = obj["high"]high.append(get_pure_temperature(h))l = obj["low"]low.append(get_pure_temperature(l))date_time.append(obj["ymd"])#取得高温低温和日期,开始绘折线图。
make_chart(high, low, date_time)

运行结果如图:

Python从网络接口爬取json天气预报数据绘制高温低温双折线图相关推荐

  1. AJAX教程美食滤镜,Python爬虫实例——爬取美团美食数据

    1.分析美团美食网页的url参数构成 1)搜索要点 美团美食,地址:北京,搜索关键词:火锅 2)爬取的url https://bj.meituan.com/s/%E7%81%AB%E9%94%85/ ...

  2. python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析

    这篇文章主要介绍了python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析的实例,帮助大家更好的理解和学习使用python.感兴趣的朋友可以了解下 一.环境准备 python3.8.3 ...

  3. Python爬虫:爬取喜马拉雅音频数据详解

    前言 喜马拉雅是专业的音频分享平台,汇集了有声小说,有声读物,有声书,FM电台,儿童睡前故事,相声小品,鬼故事等数亿条音频,我最喜欢听民间故事和德云社相声集,你呢? 今天带大家爬取喜马拉雅音频数据,一 ...

  4. Python爬虫 senlenium爬取拉勾网招聘数据,你学会了吗

    一.基本思路 目标url:https://www.lagou.com/ 用selenium爬虫实现,输入任意关键字,比如 python 数据分析 ,点击搜索,得到的有关岗位信息,爬取下来保存到Exce ...

  5. Windows下利用python+selenium+firefox爬取动态网页数据(爬取东方财富网指数行情数据)

    由于之前用urlib和request发现只能获取静态网页数据,目前爬取动态网页有两种方法, (1)分析页面请求 (2)Selenium模拟浏览器行为(霸王硬上弓),本文讲的就是此方法 一.安装sele ...

  6. python爬虫senlenium爬取拉勾网招聘数据!

    一.基本思路 目标url:https://www.lagou.com/ 用selenium爬虫实现,输入任意关键字,比如 python 数据分析,点击搜索,得到的有关岗位信息,爬取下来保存到Excel ...

  7. python不登陆爬取淘宝数据_python登录并爬取淘宝信息代码示例

    本文主要分享关于python登录并爬取淘宝信息的相关代码,还是挺不错的,大家可以了解下. #!/usr/bin/env python # -*- coding:utf-8 -*- from selen ...

  8. python使用selenium爬取斗鱼房间数据并写入mongodb数据库

    本篇文章是对之前斗鱼爬虫的修改,将爬取到的数据直接写入mongodb数据库中 (今天学习到mongodb) from selenium import webdriver import time fro ...

  9. python爬取各类基金数据,以『动图可视化』方式展示基金的涨跌情况

    01前言 去年接触基金,体会到了基金的香(真香),今天也是过年后基金开始交易的第一天,今天爬取『蛋卷基金』数据,通过pyecharts动图可视化方式展示基金的涨跌情况. 本文将围绕这三点去进行爬取数据 ...

最新文章

  1. Mondrian xml服务mysql_导入Mondrian例子数据库到mysql中 windows环境
  2. c语言在keil上程序合并,keil中怎么把两个c程序怎么同时同时编译生成一个hex文件...
  3. python--8、面向对象的深入知识
  4. php冒泡和选择排序,选择排序vs冒泡排序
  5. mysql grep 提取错误日志_详解grep获取MySQL错误日志信息的方法
  6. python3中实现tar_Python3实现将文件树中所有文件和子目录归档到tar压缩文件的方法...
  7. 提示word损坏,需文本恢复转换器的解决两方法
  8. b+tree索引在MyIsam和InnoDB的不同实现方式
  9. 富士施乐Fuji Xerox DocuPrint CP215 w 驱动
  10. VMware虚拟机安装操作系统方法
  11. 【paper 2】Learning from Simulated and Unsupervised Images through Adversarial Training
  12. 有什么APP软件可以测试耳环,心理测试选择自己喜欢的耳环,测试自己最招桃花的地方...
  13. 想借微商发家?打造千万级分销体系的方法论在这里!
  14. 房屋管理小程序的功能
  15. python自动化测试第三次课-----数据类型,list,元组,切片,字典
  16. Capacity of the Gaussian Two-Way Relay Channel to Within 1/2 Bit
  17. 可视化 | Python精美动态水球图
  18. 【解决密码栏不显示】“可能是其他人在试图访问您的google账号....”
  19. mysql hy000 2013_MySQL ERROR 2013 (HY000)错误解决方法
  20. Linux信号详解:signal与sigaction函数【2】

热门文章

  1. git的初始化+常见bug解决方案
  2. 991. 坏了的计算器【中等】
  3. Android源码中com.android.support依赖迁移到AndroidX库
  4. sublimetext3格式化python代码_sublime text 3搭建python
  5. echarts gallery最新地址
  6. MerkleTree 构建QT实现UI
  7. 百度被曝3月推出自家ChatGPT/ 小米全球副总裁辞职/ 苹果折叠屏iPad有消息了...今日更多新鲜事在此...
  8. iOS:iPad和iPhone开发的异同(UIPopoverController、UISplitViewController)
  9. java_note9
  10. 若依RuoYi-Vue前后台框架,下载运行,若依系统生成代码