前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python3获取网页天气预报信息并打印

python3获取网页天气预报信息并打印

作者头像
BH8ANK
发布2021-01-29 12:16:03
4750
发布2021-01-29 12:16:03
举报
文章被收录于专栏:云技术分享

查到一个可以提供区域天气预报的url,说明文档在https://www.sojson.com/blog/234.html,

代码语言:javascript
复制
https://www.sojson.com/open/api/weather/json.shtml?city=%E6%88%90%E9%83%BD

打算用python从上面获取预报信息,打印下来

代码如下:
代码语言:javascript
复制
  1 #python 3.6
  2 #!/usr/bin/env python
  3 # -*- coding:utf-8 -*-
  4 __author__ = 'BH8ANK'
  5 
  6 
  7 import urllib.request
  8 import time
  9 import ssl
 10 import json
 11 # #weather = "https://www.baidu.com"
 12 time.sleep(3)    #此处等待3秒主要是对应网页提示,三秒内只能访问一次
 13 ssl._create_default_https_context = ssl._create_unverified_context
 14 url = r"https://www.sojson.com/open/api/weather/json.shtml?city=%E6%88%90%E9%83%BD"#一个提供区域天气预报的url
 15 
 16 
 17 
 18 page = urllib.request.urlopen(url)
 19 # # ssl._create_default_https_context=ssl._create_unverified_context
 20 html = page.read().decode("utf-8")
 21 
 22 
 23 '''
 24     json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)
 25     (1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串)
 26     (2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)
 27 '''
 28 
 29 res = json.loads(html)
 30 a = json.dumps(res, ensure_ascii=False, indent=4)          #将读取到的内容格式化,这样就可以看到有缩进、换行的内容
 31 # print(a)
 32 fp = open(r"C:\Users\xxx\Documents\weather.txt", "w",encoding='UTF-8') #将读取内容保存到文件
 33 fp.write(a) #写入数据
 34 fp.close() #关闭文件
 35 
 36 res = json.loads(a) #将json转化为dict
 37 # print(res)
 38 
 39 '''
 40 通过查看抓到的代码,发现dict中嵌套了dict,所以需要把对应的dict取出来
 41 同样,forecast中,在list里嵌套了dict,需要仔细查看并设置中间变量
 42 '''
 43 today = res['data']
 44 yesterday = today['yesterday']
 45 forcast = today['forecast']
 46 tomorrow = forcast[0]      #注意看res文件内容,forecast其实是一个list,其元素才是dict
 47 
 48 print("\n\n")
 49 print("===============今日天气===============")
 50 print("日期:       ",res['date'])
 51 print("城市:       ",res['city'])
 52 print("温度:       ",today['wendu'])
 53 print("湿度:       ",today['shidu'])
 54 print("PM2.5:     ",today['pm25'])
 55 print("空气质量:    ",today['quality'])
 56 
 57 print("\n\n")
 58 print("===============昨日天气===============")
 59 print("日期:          ",yesterday['date'])
 60 print("城市:          ",res['city'])
 61 print("最高温度:       ",yesterday['high'])
 62 print("最低温度:       ",yesterday['low'])
 63 print("天气状况:       ",yesterday['type'])
 64 # print("PM2.5:     ",today['pm25'])
 65 # print("空气质量:    ",today['quality'])
 66 
 67 print("\n\n")
 68 print("===============明日预报===============")
 69 print("日期:          ",tomorrow['date'])
 70 print("城市:          ",res['city'])
 71 print("最高温度:       ",tomorrow['high'])
 72 print("最低温度:       ",tomorrow['low'])
 73 print("天气状况:       ",tomorrow['type'])
 74 print("温馨提醒:       ",tomorrow['notice'])
 75 # print("PM2.5:     ",today['pm25'])
 76 # print("空气质量:    ",today['quality'])
 77 
 78 
 79 
 80 
 81 
 82 '''
 83 下面是文件中的全部内容,主要是分清楚dict和list的层次,设置好中间变量,取出对应元素
 84 {
 85     "date": "20180426",
 86     "message": "Success !",
 87     "status": 200,
 88     "city": "成都",
 89     "count": 627,
 90     "data": {
 91         "shidu": "77%",
 92         "pm25": 19.0,
 93         "pm10": 40.0,
 94         "quality": "优",
 95         "wendu": "17",
 96         "ganmao": "各类人群可自由活动",
 97         "yesterday": {
 98             "date": "25日星期三",
 99             "sunrise": "06:28",
100             "high": "高温 22.0℃",
101             "low": "低温 14.0℃",
102             "sunset": "19:37",
103             "aqi": 34.0,
104             "fx": "无持续风向",
105             "fl": "<3级",
106             "type": "阴",
107             "notice": "不要被阴云遮挡住好心情"
108         },
109         "forecast": [
110             {
111                 "date": "26日星期四",
112                 "sunrise": "06:27",
113                 "high": "高温 25.0℃",
114                 "low": "低温 15.0℃",
115                 "sunset": "19:38",
116                 "aqi": 51.0,
117                 "fx": "无持续风向",
118                 "fl": "<3级",
119                 "type": "多云",
120                 "notice": "阴晴之间,谨防紫外线侵扰"
121             },
122             {
123                 "date": "27日星期五",
124                 "sunrise": "06:26",
125                 "high": "高温 27.0℃",
126                 "low": "低温 16.0℃",
127                 "sunset": "19:39",
128                 "aqi": 79.0,
129                 "fx": "无持续风向",
130                 "fl": "<3级",
131                 "type": "多云",
132                 "notice": "阴晴之间,谨防紫外线侵扰"
133             },
134             {
135                 "date": "28日星期六",
136                 "sunrise": "06:25",
137                 "high": "高温 26.0℃",
138                 "low": "低温 17.0℃",
139                 "sunset": "19:39",
140                 "aqi": 79.0,
141                 "fx": "无持续风向",
142                 "fl": "<3级",
143                 "type": "多云",
144                 "notice": "阴晴之间,谨防紫外线侵扰"
145             },
146             {
147                 "date": "29日星期日",
148                 "sunrise": "06:24",
149                 "high": "高温 27.0℃",
150                 "low": "低温 18.0℃",
151                 "sunset": "19:40",
152                 "aqi": 71.0,
153                 "fx": "无持续风向",
154                 "fl": "<3级",
155                 "type": "多云",
156                 "notice": "阴晴之间,谨防紫外线侵扰"
157             },
158             {
159                 "date": "30日星期一",
160                 "sunrise": "06:23",
161                 "high": "高温 25.0℃",
162                 "low": "低温 17.0℃",
163                 "sunset": "19:41",
164                 "aqi": 66.0,
165                 "fx": "无持续风向",
166                 "fl": "<3级",
167                 "type": "小雨",
168                 "notice": "雨虽小,注意保暖别感冒"
169             }
170         ]
171     }
172 }
173 
174 '''

主要思路是:1,先从url获取信息;2,将信息格式化,转换为dict;3,从dict中取出对应的项

注意网络连接,目标网址会识别同一IP的访问频率,三秒以内只允许一次

关键步骤是,从url获取信息后,得到的内容是没有换行和缩进的,即非格式化数据,所以需要使用json.dumps和json.loads将数据格式化

备注:

json.dumps()和json.loads()是json格式处理函数(可以这么理解,json是字符串)

(1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码(可以这么理解,json.dumps()函数是将字典转化为字符串

(2)json.loads()函数是将json格式数据转换为字典(可以这么理解,json.loads()函数是将字符串转化为字典)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档