Python与JSON,使用json捕获天气预报信息

1.JSON概述

Json(JavaScript Object Notation)是一种轻量级的数据交换格式。

Json的好处在是易与人阅读和编写,同事也易于机器解析和生成

Json采用独立于语言的文本格式,却兼容C,C++,C#,Java,JS,Python等语言

 

2.JSON结构

JSON主要有两个结构

-“键/值对的集合”:python中主要对应成字典

-值的有序列表,在大部分语言中,称为数组,在python中称为列表

 

3.dumps和loads方法

对编码后的json对象进行decode解码,得到原始数据,需要使用json.loads()函数

使用简单的json.dumps方法对简单数据类型进行编码

>>>import json

>>>number=json.dumps(1000)

>>>json.loads(number)

1000

 

4.小实验--使用json捕获天气预报信息

关于中国天气(Weather.com.cn)的查询

这两天看了下如何获取天气预报,写篇文章总结下:

Weather.com有如下三个Json格式的查询接口,以北京为例:

  1. http://www.weather.com.cn/data/sk/101010100.html

  2. http://www.weather.com.cn/data/cityinfo/101010100.html

直接访问它就可以获取到Json格式的数据,解析后就可以用了。做一个当天的天气预报也够用了。要获取其它城市的天气,只需要把标红的城市ID改成其它ID即可,至于城市的ID如何获取,下面就简单的介绍一下。

ID是一个9位的数字,按照长度可以分为如下四部分:

    101(国家代号) 01(省) 01(二级地区) 00(三级地区)

其中前面三位国家代号101是固定的,无需获取。关键是获取后面三级地区编码代号。所有城市代码:

【中国天气网城市代码】https://blog.csdn.net/ck784101777/article/details/103383890

 

1)网页测试

在浏览器输入:http://www.weather.com.cn/data/sk/101010100.html

可以看到乱码了,这是因为输出格式不支持中文(utf8)

 

2)从图-1中可以看出cityid就是城市ID,temp是温度,SD是湿度,我们编写代码可以直接获取到网站相应信息,编写脚本wather.py:

  1. [root@ localhost day12]# vim weather.py
  2. #!/usr/bin/python 
  3. from urllib.request import urlopen
  4. import json
  5.  
  6. #打开网页,使用urllib模块的urlopen函数打开url,赋值给html
  7. html = urlopen('http://www.weather.com.cn/data/sk/101010100.html')
  8. #读html获取的数据,保存到data
  9. data = html.read()
  10. #从data中获取我们想要的信息,json.loads()是将json格式数据转换为字典
  11. #(可以理解为json.loads()函数是将字符串转化为字典)
  12. print(json.loads(data))
  13. #关闭html
  14. html.close()

3)执行脚本结果如下:

 {'weatherinfo': {'city': '北京', 'cityid': '101010100', 'temp': '27.9', 'WD': '南风', 'WS': '小于3级', 'SD': '28%', 'AP': '1002hPa', 'njd': '暂无实况', 'WSE': '<3', 'time': '17:55', 'sm': '2.1', 'isRadar': '1', 'Radar': 'JC_RADAR_AZ9010_JB'}}

 

4)升级--格式化输出信息

  1. [root@ localhost day12]# vim display_weather.py
  2. #!/usr/bin/python
  3.  
  4. from urllib.request import urlopen
  5. import json
  6.  
  7.  #定义一个输入城市id的函数
  8. def get_weather(city_code):        
  9. #打开天气网页,使用urllib模块的urlopen函数打开url,赋值给html
  10.   url = 'http://www.weather.com.cn/data/sk/%s.html' % city_code
  11.   html = urlopen(url)
  12. #读html获取的数据,用json.loads()获取我们想要的信息
  13. #json.loads()是将json格式数据转换为字典
  14. #(可以理解为json.loads()函数是将字符串转化为字典)
  15.   data = json.loads(html.read())
  16. #output为返回值,即最终屏幕显示的信息
  17.   output = '风向:%s, 风力: %s, 温度:%s, 湿度:%s' % (
  18. #data获取到的天气信息为字典,该字典中weatherinfo键对应的值还是一个字典,这个字典中‘WD’键对应的值是风向,‘WS’键对应的值是风力,'temp'键对应的值是温度,'SD'键对应的值是湿度,利用键值对关系将相应数据显示出来即可
  19.      data['weatherinfo']['WD'],
  20.      data['weatherinfo']['WS'],
  21.      data['weatherinfo']['temp'],
  22.      data['weatherinfo']['SD']
  23. )
  24. return output
  25.  
  26.  
  27. if __name__ == '__main__':
  28. #定义字典:键对应的值为天气网站网址接口中城市ID
  29.   city_codes = { '0': '101010100', '1': '101121404'}
  30. #代码执行后,屏幕给出的提示信息
  31.   prompt = """(0) 北京
  32. (1) 台儿庄
  33. 请选择(0/1): """
  34. #根据提示信息,输入0或1
  35.   choice = input(prompt)
  36. #调用get_weather函数,其实际参数为city_codes字典对应值
  37. #打印调用get_weather函数返回值
  38.   print(get_weather(city_codes[choice]))

5)执行结果

(0) 北京
  (1) 台儿庄
 请选择(0/1): 1
风向:东北风, 风力: 小于3级, 温度:22.3, 湿度:64%
 

6)总结

你可以将所有的城市代码做成字典,例如city_codes={"北京":"101010100"}

【中国天气网城市代码集合】https://blog.csdn.net/ck784101777/article/details/103383890

>>> city_codes={"北京":"101010100"}
>>> city_codes
{'北京': 101010100}
>>> print(a["北京"])
101010100

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值