python实战!四行python代码就能知道你那的天气,你敢信吗?

woshijiuke woshijiuke     2022-12-24     632

关键词:

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

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

如何获取

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

使用API

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

https:/

python -c "import requests"

/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中,查看数据编码:

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‘]

上海 东风 15

感谢您的阅读,以上就是我们用四行代码获取的上海的天气预报,你现在相信了吗?还不赶紧套用一下,看看你那的天气怎么样!

 

5行python爬虫代码,就能采集每日资讯@_@(代码片段)

...人他,每天都给大家分享今日新闻他,正在学习Python他,昨天忽然觉得Python爬虫可以替代他手动操作。擦哥说,一个初级爬虫工程师,即将诞生了,没准还是一个实战型程序员,用编程解决自己重复性... 查看详情

5行python爬虫代码,就能采集每日资讯@_@(代码片段)

...人他,每天都给大家分享今日新闻他,正在学习Python他,昨天忽然觉得Python爬虫可以替代他手动操作。擦哥说,一个初级爬虫工程师,即将诞生了,没准还是一个实战型程序员,用编程解决自己重复性... 查看详情

python爬虫实战,scrapy实战,爬取知乎表情包(代码片段)

...用scrapy爬取知乎表情包。让我们愉快地开始吧~开发工具Python版本:3.6.4相关模块:scrapy模块请求模块;fake_useragent模块;以及一些python自带的模块。环境搭建安装Python并添加到环境变量,pip安装需要的相关模块即可。原理简介原... 查看详情

python应用实战-多线程应用案例(代码片段)

Python多线程的使用我们知道进程是资源分配的单位,线程是处理机调度的单位。下文就以简明的例子带大家理解线程,并使用Python实现多线程。比如在飞车程序中,我们在玩游戏的同时,还可以听到游戏为我们配置的背景音乐。... 查看详情

7个python实战项目代码

关于Python有一句名言:不要重复造轮子。但是问题有三个:1、你不知道已经有哪些轮子已经造好了,哪个适合你用。有名有姓的的著名轮子就400多个,更别说没名没姓自己在制造中的轮子。2、确实没重复造轮子&#... 查看详情

python实战之自动化评论(代码片段)

Python实战之自动化评论玩csdn博客一个多月了,渐渐发现了一些有意思的事,经常会有人用同样的评论到处刷,不知道是为了加没什么用的积分,还是纯粹为了表达楼主好人。那么问题来了,这种无聊的事情当... 查看详情

python数据分析实战:分析全国旅游景点数据,暑假还不知道去哪玩的看过来(代码片段)

...么,暑假适合去国内那些地方旅游呢?现在我们学习了python,当然要用不一样的方式来选择旅游景点,利用大数据的神奇之处&# 查看详情

深度学习应用实战案例-员工流失预测模型(python源代码)

...绝技在身,不怕天下无路”。文中涉及完整源码请参见,Python源码集锦-员工离职预测模型员工离职对于企业而言有什么影响呢?数据分析精华案例-员工流失建模与预测实例要知道,业培养人才需要大量的成本,为了防止人才再... 查看详情

如何在 Python 中删除文件的前四行和后 12 行?

】如何在Python中删除文件的前四行和后12行?【英文标题】:Howtoremovethefirstfourlinesandthelast12linesintoafileinPython?【发布时间】:2016-05-1115:13:42【问题描述】:h=httplib.HTTPSConnection(host,port)h.set_debuglevel(0)headers="Content-Type":"multipart/form 查看详情

python爬虫应用实战-网站数据爬取及数据分析(代码片段)

实战一:中国大学排名前言由于上一篇文章中教会了大家如何存储数据,但是由于篇幅过大,就没有加入实战篇。想必大家也等着急了吧,所以今天就为大家带来两篇实战内容,希望可以帮助到各位更好的认识到爬虫与MySQL数据... 查看详情

python实战基础如何生成随机密码(代码片段)

...读写基础语法字符串处理字符拼接三、菜鸟实战1、创建python文件2、运行结果一、实战场景实战场景:如何生成随机密码二、主要知识点文件读写基础语法字符串处理字符拼接三、菜鸟实战马上安排!1、创建python文件"... 查看详情

python3多进程实战(python3经典编程案例)(代码片段)

python3多进程实战(python3经典编程案例)python3多线程实战(python3经典编程案例)python3协程实战(python3经典编程案例)进程是操作系统进行资源分配和调度的基本单位,进程之间是通过轮流占用cpu来执... 查看详情

python实战python一行代码,实现文件共享服务器

目录一行代码实现文件共享就是这么简单1、需要共享的内容2、python一键共享3、共享效果4、通过http直接访问参数详解推荐一行代码实现文件共享在一个局域网内,需要 查看详情

python实战python一行代码,实现文件共享服务器

目录一行代码实现文件共享就是这么简单1、需要共享的内容2、python一键共享3、共享效果4、通过http直接访问参数详解推荐一行代码实现文件共享在一个局域网内,需要 查看详情

python爬虫实战,scrapy实战,大众点评爬虫(代码片段)

...的数据,顺便再把爬到的数据做一波可视化分析开发工具Python版本:3.6.4相关模块:scrapy模块;requests模块;fontTools模块;pyecharts模块;以及一些python自带的模块。环境搭建安装python并添加到环境变量,pip安装需要的相关模块即... 查看详情

你对python变量理解到位了没有,80%的人都不知道(代码片段)

变量是编程的基础概念,Python的变量也看似很简单,但是如果理解不当,生搬硬套,可能会遇到一些麻烦。下面用10个代码示例展示Python的 变量 本质。不过还要注意:不管你是为了Python就业还是兴趣爱好,记住:项目开... 查看详情

python进阶实战之三级菜单(代码片段)

目录Python进阶实战之三级菜单面条版文艺青年版Python进阶实战之三级菜单打印省、市、县三级菜单可返回上一级可随时退出程序面条版menu='北京':'海淀':'五道口':'soho':,'网易':,'google':,'中关... 查看详情

python3多线程实战(python3经典编程案例)(代码片段)

python3多进程实战(python3经典编程案例)python3多线程实战(python3经典编程案例)python3协程实战(python3经典编程案例)总结:python多线程适用在I/O密集型的任务中。对于I/O密集型任务来说,较少的... 查看详情