这是我的第一篇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接口
city_name = input('请输入要查询的城市名称:')
urllib.parse.quote(city_name)
url = 'http://wthrcdn.etouch.cn/weather_mini?city='+urllib.parse.quote(city_name)
第二步:访问url链接,解析服务器返回的json数据,变成python的字典数据
weather_data = urllib.request.urlopen(url).read()
weather_data = gzip.decompress(weather_data).decode('utf-8')
weather_dict = eval(weather_data)
if weather_dict.get('desc') == 'invilad-citykey':
print('您输入的城市未收录')
这里weather返回的是一个json对象,可以理解为p中的字典【但是其实两者是不一样的】
第三步:对字典进行索引,获取气温、风速、风向等天气信息
print('您查询的城市:',weather_dict['data']['city'])
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返回的数值都给便利了一遍并打印出来
|