专栏首页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的编程教室)回复 查天气

本文分享自微信公众号 - Crossin的编程教室(crossincode),作者:Crossin先生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 10个省时间的 PyCharm 技巧

    经常听人说,多看源码。源码不仅能帮我们搞清楚运行机制,还能学习优秀的库或者框架的最佳实践。

    Crossin先生
  • 我们一直谈论“写代码”,但你会“读代码”吗?

    编程,又被称作“写代码”。这个说法有可能会带来一点点误解,让人觉得如何“写”是学习编程要解决的主要问题。但事实并非如此。尽管最终代码要在键盘上敲出来,但这个过程...

    Crossin先生
  • 从教女友写代码中学到的

    从教女友写代码中学到的,教人写代码在一定程度上是硬件问题 本文由 伯乐在线 - 奇风余谷 翻译自 Shu Uesugi。译文链接见文末“阅读原文”。 从今年四月...

    Crossin先生
  • 动态 | KDD首推Health Day,探讨如何用AI、数据挖掘改变未来医疗 | KDD 2018

    伦敦当地时间8月20日, ACM SIGKDD (知识发现与数据挖掘会议)正式在伦敦开幕,AI 科技评论也来到了现场为大家报道现场的盛况。

    AI科技评论
  • 大数据分析学习必须用到的工具,一定要收藏

    数据存储涉及到数据库的概念和数据库语言,这方面不一定要深钻研,但至少要理解数据的存储方式、数据的基本结构和数据类型。SQL查询语言必不可少,精通最好。可从常用的...

    一起学习大数据
  • GitHub代码一键转VS Code:只需+1s

    VS Code 是一个由微软开发,同时支持 Windows、 Linux 和 macOS 等操作系统的免费代码编辑器,它支持测试,并内置了 Git 版本控制功能...

    机器之心
  • 【留言送书】GitHub代码一键转VS Code:只需+1s

    VS Code 是一个由微软开发,同时支持 Windows、 Linux 和 macOS 等操作系统的免费代码编辑器,它支持测试,并内置了 Git 版本控制功能...

    lujohn3li
  • R语言从入门到精通:Day14(PCA & tSNE)

    主成分分析(Principle component analysis, PCA)前面我们已经用两期教程跟大家讲过理论和实际绘图(在线主成分分析Clustvis和...

    用户6317549
  • #PY小贴士# 什么是“高内聚,低耦合”

    听起来有点玄乎,用大白话来讲,大致就是:写代码要分模块,就像搭积木,一个功能一个模块,每个模块做好一件事,不同模块之间尽量不要互相依赖。这样代码会更简单,易于扩...

    Crossin先生
  • 17年编程生涯的三大经验总结

    17年编程生涯的三大经验总结 今年将迎来我编程的第十七个年头。我的编程之旅始于九十年代末,上大学的时候,主要涉足基于表格的网页设计,传统的ASP,和Micros...

    用户1289394

扫码关注云+社区

领取腾讯云代金券