Python查询指定地址天气{url}-{gzip}

这是我的第一篇Markdown写的关于Python查询天气的文档

首先感谢 张兄弟 的帮助,以及同济子豪兄弟【https://www.bilibili.com/video/BV1Yb411c7Hi】提供的代码教程
该算法主要包括三个部分

首先是 引入库

其中urllib【学习路径】是python内置的HTTP请求包

import urllib.request
import gzip

第一个模块 request,它是最基本的 HTTP 请求模块,我们可以用它来模拟发送一请求,就像在浏览器里输入网址然后敲击回车一样,只需要给库方法传入 URL 还有额外的参数,就可以模拟实现这个过程了。
urllib.request 模块提供了最基本的构造 HTTP 请求的方法,利用它可以模拟浏览器的一个请求发起过程,同时它还带有处理authenticaton(授权验证),redirections(重定向),cookies(浏览器Cookies)以及其它内容

第二个 error 模块即异常处理模块,如果出现请求错误,我们可以捕获这些异常,然后进行重试或其他操作保证程序不会意外终止。
第三个 parse 模块是一个工具模块,提供了许多 URL 处理方法,比如拆分、解析、合并等等的方法。
第四个模块是 robotparser,主要是用来识别网站的 robots.txt 文件,然后判断哪些网站可以爬,哪些网站不可以爬的,其实用的比较少。
在这里重点对前三个模块进行下讲解

第一步:生成查询天气的url链接

这里的 http://wthrcdn.etouch.cn/weather_mini?city= 是中国天气网API接口

## 第一步:生成查询天气的url链接
city_name = input('请输入要查询的城市名称:')

# 将城市的中文名字编码成utf-8字符,比如urllib.parse.quote(“上海”)就是'%E4%B8%8A%E6%B5%B7'
urllib.parse.quote(city_name)
# 生成完整url链接
url = 'http://wthrcdn.etouch.cn/weather_mini?city='+urllib.parse.quote(city_name)

第二步:访问url链接,解析服务器返回的json数据,变成python的字典数据

# 获取服务器返回的json字节串数据
weather_data = urllib.request.urlopen(url).read()
# 将字节串数据解码为unicode中的utf-8数据
weather_data = gzip.decompress(weather_data).decode('utf-8')
# 将json数据转为python的字典数据————————这一步非常非常重要
weather_dict = eval(weather_data)
if weather_dict.get('desc') == 'invilad-citykey':
    print('您输入的城市未收录')

这里weather返回的是一个json对象,可以理解为p中的字典【但是其实两者是不一样的】
这是weather的运行展示

  • 这里要留一json的主键是data
  • 这里也提供了一个在线json查看平台

第三步:对字典进行索引,获取气温、风速、风向等天气信息

print('您查询的城市:',weather_dict['data']['city'])  #因为主键是data,所以读取内嵌字典是dict[x][y]的格式
print('--------------------------')
print('今天的天气')
print('温度',weather_dict['data']['wendu'])
print('感冒指数',weather_dict['data']['ganmao'])
print('--------------------------')
print('昨天的天气')
print('昨天:',weather_dict['data']['yesterday']['date'])
print('天气:',weather_dict['data']['yesterday']['type'])
print('最高气温:',weather_dict['data']['yesterday']['high'])
print('最低气温:',weather_dict['data']['yesterday']['low'])
print('风向:',weather_dict['data']['yesterday']['fx'])
print('风力:',weather_dict['data']['yesterday']['fl'][-5:-3])
print('--------------------------')

第四步:遍历forecast列表中的五个元素,打印天气信息

print()
print()
print("下面是预报内容")
print()
for each in weather_dict['data']['forecast']:
    print('日期',each['date'])
    print('天气',each['type'])
    print(each['high'])
    print(each['low'])
    print('风向',each['fengxiang'])
    print('风力:',each['fengli'][-5:-3])
    print('--------------------------')

这就是运行结果了

通过3-4步把整个weather_dict返回的数值都给便利了一遍并打印出来

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值