4行Python代码获取所在城市天气预报

2023-11-10 04:30

本文主要是介绍4行Python代码获取所在城市天气预报,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  

4行Python代码获取所在城市天气预报

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

  如何获取

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

  使用API

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

  wwwzhihu/question/20575288

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

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

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

  weather/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('weather/data/sk/101020100.html')

  In [3]: r.status_code

  Out[3]: 200

  In [4]: r.content

  Out[4]: '{"weatherinfo":{"city":"\xe4\xb8\x8a\xe6\xb5\xb7","cityid":"101020100","temp":"15","WD":"\xe4\xb8\x9c\xe9\xa3\x8e","WS":"1\xe7\xba\xa7","SD":"50%","WSE":"1","time":"17:08","isRadar":"1","Radar":"JC_RADAR_AZ9210_JB","njd":"\xe6\x9a\x82\xe6\x97\xa0\xe5\xae\x9e\xe5\x86\xb5","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'\xe4\xb8\x9c\xe9\xa3\x8e',

  u'WS': u'1\xe7\xba\xa7',

  u'WSE': u'1',

  u'city': u'\xe4\xb8\x8a\xe6\xb5\xb7',

  u'cityid': u'101020100',

  u'isRadar': u'1',

  u'njd': u'\xe6\x9a\x82\xe6\x97\xa0\xe5\xae\x9e\xe5\x86\xb5',

  u'qy': u'1020',

  u'rain': u'0',

  u'temp': u'15',

  u'time': u'17:08'}}

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

  解决乱码

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

  

4行Python代码获取所在城市天气预报

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

  In [6]: r.encoding

  Out[6]: 'ISO-8859-1'

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

  In [7]: r.json()['weatherinfo']['city']

  Out[7]: u'\xe4\xb8\x8a\xe6\xb5\xb7'

  In [8]: '\xe4\xb8\x8a\xe6\xb5\xb7'.decode('utf-8')

  Out[8]: u'上海'

  In [9]: print '\xe4\xb8\x8a\xe6\xb5\xb7'.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代码获取所在城市天气预报

  4行Python代码获取天气预报

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

  In [1]: import requests

  In [2]: r=requests.get('weather/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']

 

这篇关于4行Python代码获取所在城市天气预报的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/380416

相关文章

HTML5实现的移动端购物车自动结算功能示例代码

《HTML5实现的移动端购物车自动结算功能示例代码》本文介绍HTML5实现移动端购物车自动结算,通过WebStorage、事件监听、DOM操作等技术,确保实时更新与数据同步,优化性能及无障碍性,提升用... 目录1. 移动端购物车自动结算概述2. 数据存储与状态保存机制2.1 浏览器端的数据存储方式2.1.

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Java Spring ApplicationEvent 代码示例解析

《JavaSpringApplicationEvent代码示例解析》本文解析了Spring事件机制,涵盖核心概念(发布-订阅/观察者模式)、代码实现(事件定义、发布、监听)及高级应用(异步处理、... 目录一、Spring 事件机制核心概念1. 事件驱动架构模型2. 核心组件二、代码示例解析1. 事件定义

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

Python中提取文件名扩展名的多种方法实现

《Python中提取文件名扩展名的多种方法实现》在Python编程中,经常会遇到需要从文件名中提取扩展名的场景,Python提供了多种方法来实现这一功能,不同方法适用于不同的场景和需求,包括os.pa... 目录技术背景实现步骤方法一:使用os.path.splitext方法二:使用pathlib模块方法三