前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >这段代码实例,见证了数万人入门编程

这段代码实例,见证了数万人入门编程

作者头像
Crossin先生
发布2018-09-30 11:29:43
6920
发布2018-09-30 11:29:43
举报
文章被收录于专栏:Crossin的编程教室

我的微信 Python 教程里有两个比较重要的代码实例,一个是前期的“猜数字”,这个例子演示了基本的输入输出、运算、类型、逻辑,之后的扩展又涉及到函数、数据结构、文件读写等。

另一个是“查天气”。这个例子算得上一个简单的“网络爬虫”,是你的代码从单机向网络进化的第一步,并且涉及到文件读写、类型转换、多层循环、模块等功能的综合应用。因此,当你能独立完成这样一个案例时(包括城市代码的抓取),可以说是完成了 Python 编程的“入门”。

很多同学学到这里都会遇到一些阻碍,加上接口的变动和版本的更新,我经常会收到各种提问。今天在这儿,我做一个相对完整的解说,并且附上包含不同版本、不同方式、不同接口的更新版示例代码。

回复 查天气 查看对应教程及代码

1. 请求地址

教程原版接口,获取某一城市的天气:

http://www.weather.com.cn/data/cityinfo/101010100.html

此接口需要城市代码。地址目前依然有效,但结果并不更新,只可用作代码练习,无实用价值。

浏览器中可能会是乱码,但代码中可以正常处理。

更好的替换接口

http://wthrcdn.etouch.cn/weather_mini?citykey=101010100

此接口需要城市代码,返回 JSON 格式的昨日天气及5天内的天气预报,包括气温、指数、空气质量、风力等。信息丰富且准确,推荐使用。

此接口还可以通过直接提供城市名称来查询

http://wthrcdn.etouch.cn/weather_mini?city=北京

需要注意的是,对方服务器会按照 UTF-8 编码来处理 city 参数,所以在 windows 下直接这样请求可能会失败。

2. 城市列表

上述接口中提及的城市列表,有几种获取方式:

直接下载文件

回复 查天气 可见地址

查询城市代码

https://blog.csdn.net/hello_haozi/article/details/7564223

此页面上有给出城市代码,你可以复制下来通过程序整理。

通过接口抓取

http://m.weather.com.cn/data3/city.xml

具体方法见【课程 查天气-4

抓取城市代码的难度要比查询天气本身难度更高。

3. 网络模块

urllib2

教程最初给的方法是基于 Python2 内置的 urllib2 模块,无需安装其他库。

urllib

在 Python3,urllib2 模块被替代,需使用 urllib.request 模块。

requests

这是一个外部的网络模块,需安装。之前文章有介绍过:这个男人让你的爬虫开发效率提升8倍。使用它,会让开发简便许多,少踩很多坑。即使你用原生网络模块完成了代码,也强烈建议体验下 requests

4. 中文编码

编码一向是 Python 的大坑,这个例子里也不例外。可能出问题的主要有3个地方:

city.py

由于代码中有中文,所以必须在文件第一行声明编码。又因为我们需要从控制台获取输入,所以这两者的编码必须一致,否则就查不到城市编码。

windows 上如果出现查不到编码的情况,尝试都设置成 gbk,而且建议在 IDE 里新建文件,把内容复制进去,而不是直接使用下载的 city.py。或者使用 PyCharm,按 PyCharm 快速上手指南 这里介绍的方法,全部设成 UTF-8 编码。

拿到的返回结果

返回值里的中文是 UTF-8 编码,requests 需要手动设定。另外,Python2 直接输出 dict 是不会解码的,需要对每个值单独输出。

发送的url

前面提到,有个接口可以直接将城市名作为参数。如果你是 windows,需要使用 quote 方法将字符转成 UTF-8 的 URL 编码后再发送请求。

5. 其他问题

gzip

有些接口的结果进行了 gzip 压缩,导致拿到的返回值是一段完全看不懂的乱码,需通过 gzip 解压缩。requests 不存在这个问题,urllib 的处理参见代码。

调试

开发中总会遇到各种问题,遇到问题不要抓瞎,要去调试:

1. 多加 print 输出。了解程序的运行状态和变量的值,看看和预期是否一致。

2. 注意看报错信息,出在哪一行,是什么错。

3. 一行代码做一件事。如果报错的代码行连续调用了几个函数,把它分成几行代码再运行。

4. 在出错行之前输出信息,查看此行代码使用到的变量都是什么值什么类型。

5. 开发时先不要加异常处理,否则你无法看到报错信息

以上就是“查天气”实例中需要注意的常见问题。如有其它疑问,可在文后留言,或点击“阅读原文”,进入论坛专题进行讨论。

具体的实现细节参见代码。

获取代码地址,公众号(Crossin的编程教室)回复 查天气

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档