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


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

    https://www.sojson.com/open/api/weather/json.shtml?city=%E6%88%90%E9%83%BD

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

    代码如下:
      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:UsersxxxDocumentsweather.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("
    
    ")
     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("
    
    ")
     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("
    
    ")
     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()函数是将字符串转化为字典)

        

  • 相关阅读:
    2017-2018-1 20179215《Linux内核原理与分析》第九周作业
    2017-2018-1 20179215 速读《构建之法》
    2017-2018-1 20179215 速读《从问题到程序》
    2017-2018-1 20179215《Linux内核原理与分析》第八周作业
    2017-2018-1 20179215《Linux内核原理与分析》第七周作业
    2017-2018-1 20179215 课堂测试
    2017-2018-1 20179215《Linux内核原理与分析》第六周作业
    2017-2018-1 20179215《Linux内核原理与分析》第五周作业
    20179215 第二周课堂测试
    2017-2018-1 20179215《Linux内核原理与分析》第三周作业
  • 原文地址:https://www.cnblogs.com/BH8ANK/p/8953201.html
Copyright © 2020-2023  润新知