《云计算全栈》-python篇:天气预报查询、使用requests获取天气

案例3:天气预报查询
案例4:使用requests获取天气
3 案例3:天气预报查询
3.1 问题

编写一个display_weather.py脚本,实现以下功能:

运行程序时,屏幕将出现你所在城市各区县名字
用户指定查询某区县,屏幕上将出现该区县当前的气温、湿度、风向、风速等

3.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:找到天气信息规律

1.首先我们想要实现的功能是天气预报,从哪获取天气这是一个问题,在这里可以使用http://www.weather.com.cn/data/sk/101051301.html这个应用程序编程接口,101051301是城市的ID,可以到http://www.weather.com.cn/查看,替换后浏览器打开,如图-6所示,图示为json格式:
在这里插入图片描述
图-6

注意:图中看不懂的文字是编码问题

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

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

3.执行脚本结果如下:

[root@ localhost day12]# python3 weather.py
{‘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’}}

从以上脚本执行结果中我们可以看到,从网站中获取到的数据是以字典形式显示,显示信息有城市、城市id,温度、风向等等,根据这种规律,编写下面代码

步骤二:编写代码实现如下功能

1.定义一个字典,该字典中键‘0’和‘1’对应的值为天气网址中城市对应的id,城市不同id则不同

2.运行程序时,屏幕将出现你所在城市名字

3.当用户指定查询某城市(即输入0或1时)

4.调用get_weather函数,函数的实际参数为city_codes字典对应值(即对应的城市id)

  1. 打开天气网页,使用urllib模块的urlopen函数打开url,赋值给html

6.读html获取的数据,用json.loads()获取天气信息,获取到的信息为字典形式

7.从获取到的字典数据中提取气温、湿度、风向、风速等信息,保存在output变量中

8.将output变量作为get_weather函数的返回值,打印在屏幕上

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

步骤三:测试脚本执行

[root@ localhost day12]# python3 display_weather.py
(0) 北京
(1) 台儿庄
请选择(0/1): 0
 风向:南风, 风力: 小于3级, 温度:27.9, 湿度:28%
[root@ localhost day12]# python3 display_weather.py
(0) 北京
(1) 台儿庄
请选择(0/1): 1
 风向:东北风, 风力: 小于3级, 温度:22.3, 湿度:64%

4 案例4:使用requests获取天气
4.1 问题

编写一个display_weather2.py脚本,实现以下功能:

运行程序时,屏幕将出现你所在城市各区县名字
用户指定查询某区县,屏幕上将出现该区县当前的气温、湿度、风向、风速等

4.2 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装requests

[root@localhost ~]# pip3 install requests

步骤二:编写代码实现如下功能

1.定义一个字典,该字典中键‘0’和‘1’对应的值为天气网址中城市对应的id,城市不同id则不同

2.运行程序时,屏幕将出现你所在城市名字

3.当用户指定查询某城市(即输入0或1时)

4.调用get_weather函数,函数的实际参数为city_codes字典对应值(即对应的城市id)

5.通过requests发送一个GET请求到url网址,获取网页

  1. 为获取的网页设置编码,并以json形式返回数据

7.从获取到的字典数据中提取气温、湿度、风向、风速等信息,保存在output变量中

8.将output变量作为get_weather函数的返回值,打印在屏幕上

[root@ localhost day12]# vim display_weather2.py
#!/usr/bin/python
import requests        #引用requests模块
def get_weather(city_code):        #定义一个输入城市id的函数
    url = 'http://www.weather.com.cn/data/sk/%s.html' % city_code    #天气地址
5.通过requests发送一个GET请求到url网址,获取网页
    r = requests.get(url)
6. 为获取的网页设置编码,并以json形式返回数据
    r.encoding = 'utf8'
#Requests中内置的JSON解码器,以json形式返回,前提返回的内容确保是json格式的,不然解析出错会抛异常
    data = r.json()
    7.output为返回值,即最终屏幕显示的信息
    output = '风向:%s, 风力: %s, 温度:%s, 湿度:%s' % (
#data获取到的天气信息为字典,该字典中weatherinfo键对应的值还是一个字典,这个字典中‘WD’键对应的值是风向,‘WS’键对应的值是风力,'temp'键对应的值是温度,'SD'键对应的值是湿度,利用键值对关系将相应数据显示出来即可
        data['weatherinfo']['WD'],
        data['weatherinfo']['WS'],
        data['weatherinfo']['temp'],
        data['weatherinfo']['SD']
    )
    return output
if __name__ == '__main__':
1.定义字典:键对应的值为天气网站网址接口中城市ID
    city_codes = { '0': '101010100', '1': '101121404'}
2.代码执行后,屏幕给出的提示信息
    prompt = """(0) 北京
(1) 台儿庄
请选择(0/1): """
3.根据提示信息,输入0或1
    choice = input(prompt)
4.调用get_weather函数,其实际参数为city_codes字典对应值
8.打印调用get_weather函数返回值
    print(get_weather(city_codes[choice]))

步骤三:测试脚本执行

[root@ localhost day12]# python3 display_weather2.py
(0) 北京
(1) 台儿庄
请选择(0/1): 0
 风向:南风, 风力: 小于3级, 温度:27.9, 湿度:28%
[root@ localhost day12]# python3 display_weather2.py
(0) 北京
(1) 台儿庄
请选择(0/1): 1
 风向:东北风, 风力: 小于3级, 温度:22.3, 湿度:64%
发布了275 篇原创文章 · 获赞 46 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/xie_qi_chao/article/details/104726387