你敢信?四行Python代码就能知道你那的天气!

今天给大家带来的Python实战项目是四行Python代码获取所在城市的天气预报,我们隐隐听到唏嘘声,不信四行Python代码可以获取是吗?那我们一起来看看:

使用Python获取天气预报,想想是件很简单的事情。无非是发送一个HTTP请求,再解析请求返回的结果。当你真的使用Python程序去获取天气预报以后,会发现,有不少坑在等着你。这里简单记录一下我遇到的坑,供大家参考。

如何获取

使用Python获取天气有两种不同的方法,一种是像平时爬虫一样,获取天气预报网站的HTML页面,再使用XPath或BeautifulSoup解析HTML页面的内容。这是比较传统的爬虫方式。此外,还有另外一种比较合适的方法——通过天气预报网站提供的API。通过API,直接获取结构化的数据,省去了解析HTML的烦恼。

使用API

搜索”天气预报 API”这两个关键字,会有很多相关的内容,例如,这个

https:/

python -c "import requests"

/http://wwwzhihu.com/question/20575288

答案下就列出了不少提供API访问天气预报的网站。

然而,大部分都已经不可用了。部分可用的需要收费或者需要注册,都比较麻烦。有没有比较省事的方案呢?找来找去,我找到了中国天气网的API。无需注册直接可用,返回json格式的数据,无需使用BeautifulSoup或XPath解析,非常的方便。赞!

例如,可以直接访问下面的地址,在浏览器中查看中国天气网返回的json数据:

http://www.weather.com.cn/data/sk/101020100.html

有了API处理起来就很简单了,直接使用Python世界最知名的requests访问API即可。

安装requests:

pip install requests

检查安装是否成功:

python -c “import requests”

使用ipython测试:

In [1]: import requests
In [2]: r = requests.get('http://www.weather.com.cn/data/sk/101020100.html')
In [3]: r.status_code
Out[3]: 200
In [4]: r.content
Out[4]: '{"weatherinfo":{"city":"ä¸æµ·","cityid":"101020100","temp":"15","WD":"ä¸é£","WS":"1级","SD":"50%","WSE":"1","time":"17:08","isRadar":"1","Radar":"JC_RADAR_AZ9210_JB","njd":"ææ å®åµ","qy":"1020","rain":"0"}}'
In [5]: r.json()
Out[5]: {u'weatherinfo': {u'Radar': u'JC_RADAR_AZ9210_JB',
 u'SD': u'50%',
 u'WD': u'ä¸é£',
 u'WS': u'1级',
 u'WSE': u'1',
 u'city': u'ä¸æµ·',
 u'cityid': u'101020100',
 u'isRadar': u'1',
 u'njd': u'ææ å®åµ',
 u'qy': u'1020',
 u'rain': u'0',
 u'temp': u'15',
 u'time': u'17:08'}}

requests库包含一个名为json的方法,当请求的地址返回的是json格式的数据时,直接使用该方法访问即可,无需使用标准库的json库。

解决乱码

如果大家刚才在浏览器中打开了我给的地址,会发现,输出结果是乱码的。如下所示:

我们可以在ipython中,查看数据编码:

‍哈喽,小伙伴由于限制教程不能直接发送
我整理了小白需要的资源包-python&pycharm安装包(激活码),爬虫工具,项目源码,小白学习资料获取-下方链接
https://b23.tv/aDfZSUe
秒发,秒通过 ‍[星星眼][星星眼]

最近up有收到私信 好多其他up冒充我私信大家 也是非常抱歉 给你们带来不好的感受了 你们一定 要注意分辨哦 

In [6]: r.encoding
Out[6]: 'ISO-8859-1'

我们知道,乱码是因为解码的字符集与编码的字符集不一样,所以才会有乱码。那么,我们怎么知道数据的编码字符集呢?这个时候就靠猜了。众所周知,utf-8因为各种优点(如果大家感兴趣,我可以写一篇字符集编码的文章),是使用最广泛的字符集编码,因此,我们可以尝试使用utf-8进行解码。如下所示:

In [7]: r.json()['weatherinfo']['city']
Out[7]: u'ä¸æµ·'
In [8]: 'ä¸æµ·'.decode('utf-8')
Out[8]: u'上海'
In [9]: print 'ä¸æµ·'.decode('utf-8')
上海

可以看到,使用utf-8解码以后,可以正确的显示数据。也就是说,中国天气网返回给我们的数据,应该是utf-8格式的。那么,为什么会乱码呢?这可能是中国天气网的工程师水平不行,也可能是故意不想让我们使用,谁知道呢。

我们已经知道了正确的编码,接下来,只要将相应的数据,使用utf-8格式解码即可。requests库本身提供了这样的功能,如下所示:

In [10]: r.encoding = 'utf-8'
In [11]: print r.json()['weatherinfo']['city']
上海

获取不同城市的天气预报

前面的例子,获取的是上海的天气预报。如果想要使用中国天气网的API,获取其他城市的天气预报呢?中国天气网并没有提供相应的接口,我们只能自己想办法。

在我们测试的URL中,101020100是城市的代码,我们只需要找到其他城市的代码,将101020100替换成相应的代码即可。查找方法是,在中国天气网的首页,搜索城市的名称,地址栏中会显示相应城市的代码。如下所示:

4 行Python代码获取天气预报

使用Python获取天气预报的例子中,我们的主要任务在于找到相应的API,解决字符集编码问题。当这些问题解决以后,直接使用requests库获取天气预报即可。下面是获取所在城市天气预报的4行Python代码:

In [1]: import requests
In [2]: r = requests.get('http://www.weather.com.cn/data/sk/101020100.html')
In [3]: r.encoding = 'utf-8'
In [4]: print r.json()['weatherinfo']['city'], r.json()['weatherinfo']['WD'], r.json()['weatherinfo']['temp']

           知道你对python感兴趣,所以给你准备了下面的资料~

 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以点击链接免费领取或者滑到最后扫描二v码保证100%免费

python学习资源免费分享,保证100%免费!!!

需要的话可以点击这里👉Python学习路线(2023修正版)附涉及资料 (安全链接,放心点击)

文末有福利领取哦~ 

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。在这里插入图片描述​​​​​

二、Python必备开发工具

在这里插入图片描述​​​​​

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

四、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述​​​​​
在这里插入图片描述​​​​​

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述​​​​​

六、Python练习题

检查学习结果。
在这里插入图片描述​​​​​

七、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述​​​​​
在这里插入图片描述​​​​​

 👉这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码或者点击链接免费领取【保证100%免费Python学习路线(2023修正版)附涉及资料《Python学习资料》,已经打包好了,自取【ps:需要领取的资料(请备注清楚,查找与发送给你)】。因链接常https://mp.weixin.qq.com/s/UVxw0daFCgAMFhz9cfrjAQ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值