zoukankan      html  css  js  c++  java
  • Python学习笔记(六)——查询天气脚本

    做了一个查询天气的小脚本,使用的是中华万年历的天气API接口:url = r'http://wthrcdn.etouch.cn/weather_mini?citykey=101280101

    首先是导入城市数据,根据输入的城市名称,查到city_code,这里我从网上找了个城市代码的文件。

    用pickle导入,然后找出对应的code。

     1 # coding=utf-8    
     2 import requests
     3 import json
     4 import pickle
     5 
     6 #获取城市代码
     7 f = open('city_data.pkl', 'rb')
     8 city_file = pickle.load(f)
     9 f.close()
    10 city_name = input('请输入想要查询的城市:')
    11 city_code = city_file[city_name]

    获得city_code后,将code传入url,使用requests.get得到数据。然后使用json.loads()解码。

    我也是今天刚刚接触requests模块,这里给出requests的官方文档

    1 #利用城市名称查询天气
    2 url = r'http://wthrcdn.etouch.cn/weather_mini?citykey=%s' %city_code
    3 jsonStr = requests.get(url).text
    4 
    5 data = json.loads(jsonStr)
    6 #print(data)
    7 weather = data['data']

    这样就得到了天气数据,data是这样子的:

    {'data': {'yesterday': {'date': '14日星期日', 'high': '高温 20℃', 'fx': '无持续风向', 'low': '低温 9℃', 'fl': '<![CDATA[<3级]]>', 'type': '多云'}, 'city': '广州', 'aqi': '91', 'forecast': [{'date': '15日星期一', 'high': '高温 20℃', 'fengli': '<![CDATA[<3级]]>', 'low': '低温 9℃', 'fengxiang': '无持续风向', 'type': '多云'}, {'date': '16日星期二', 'high': '高温 21℃', 'fengli': '<![CDATA[<3级]]>', 'low': '低温 10℃', 'fengxiang': '无持续风向', 'type': ''}, {'date': '17日星期三', 'high': '高温 22℃', 'fengli': '<![CDATA[<3级]]>', 'low': '低温 11℃', 'fengxiang': '无持续风向', 'type': ''}, {'date': '18日星期四', 'high': '高温 23℃', 'fengli': '<![CDATA[<3级]]>', 'low': '低温 13℃', 'fengxiang': '无持续风向', 'type': '多云'}, {'date': '19日星期五', 'high': '高温 24℃', 'fengli': '<![CDATA[<3级]]>', 'low': '低温 15℃', 'fengxiang': '无持续风向', 'type': '多云'}], 'ganmao': '昼夜温差较大,较易发生感冒,请适当增减衣服。体质较弱的朋友请注意防护。', 'wendu': '7'}, 'status': 1000, 'desc': 'OK'}

    剩下来的就是将这个字典里的各项数据取出来打印了。

    1 #打印各项数据
    2 print('城市:',weather['city'])
    3 print('当前温度',weather['wendu'] + '')
    4 print('提示',weather['ganmao'])
    5 
    6 for x in weather['forecast']:
    7     print(x['date'],x['type'],x['high'],x['low'],x['fengxiang'])

    整个运行下,得到的结果就是:

    完成。其实里面还有一项数据我没有打印出来,风力,因为在返回的data中是这个样子的 

    'fengli': '<![CDATA[<3级]]>',他的Value值是'<![CDATA[<3级]]>'。。。这个我还没想好要怎么处理。。。

    在完成了这个后,才又发现,原来这个接口可以改下,直接传入城市名也是可以的。。。

    url = r'http://wthrcdn.etouch.cn/weather_mini?city=city_name

    这样,也就不需要再去open城市数据,找到对应的城市代码了。。。更简单了。

    但是,一些异常的处理我还没有加入。如:当输入的城市错误或者不存在的时候,要给用户对应的提示。

    但是作为初次尝试使用requests模块,当看到输出结果时,还是蛮开心的。

  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number (考虑负数的情况)
    8. String to Integer (整数的溢出)
    7. Reverse Integer (整数的溢出)
    LeetCode Minimum Size Subarray Sum
    LeetCode Course Schedule II
    Linux 文件缓存 (一)
    LeetCode Tries Prefix Tree
    Linux : lsof 命令
    LeetCode Binary Tree Right Side View
  • 原文地址:https://www.cnblogs.com/fqxtony/p/8285366.html
Copyright © 2011-2022 走看看