专栏首页Crossin的编程教室【Python 第46课】 查天气(4)

【Python 第46课】 查天气(4)

明天俺就要出发了,今天赶在睡觉前来个深夜档。

这一课算是“查天气”程序的附加内容。没有这一课,你也查到天气了。但了解一下城市代码的抓取过程,会对网页抓取有更深的理解。

天气网的城市代码信息结构比较复杂,所有代码按层级放在了很多xml为后缀的文件中。而这些所谓的“xml”文件又不符合xml的格式规范,导致在浏览器中无法显示,给我们的抓取又多加了一点难度。

首先,抓取省份的列表:

url1 = 'http://m.weather.com.cn/data5/city.xml'

content1 = urllib2.urlopen(url1).read()

provinces = content1.split(',')

输出content1可以查看全部省份代码:

01|北京,02|上海,03|天津,...

对于每个省,抓取城市列表:

url = 'http://m.weather.com.cn/data3/city%s.xml'

for p in provinces:

p_code = p.split('|')[0]

url2 = url % p_code

content2 = urllib2.urlopen(url2).read()

cities = content2.split(',')

输出content2可以查看此省份下所有城市代码:

1901|南京,1902|无锡,1903|镇江,...

再对于每个城市,抓取地区列表:

for c in cities[:3]:

c_code = c.split('|')[0]

url3 = url % c_code

content3 = urllib2.urlopen(url3).read()

districts = content3.split(',')

content3是此城市下所有地区代码:

190101|南京,190102|溧水,190103|高淳,...

最后,对于每个地区,我们把它的名字记录下来,然后再发送一次请求,得到它的最终代码:

for d in districts:

d_pair = d.split('|')

d_code = d_pair[0]

name = d_pair[1]

url4 = url % d_code

content4 = urllib2.urlopen(url4).read()

code = content4.split('|')[1]

name和code就是我们最终要得到的城市代码信息。它们格式化到字符串中,最终保存在文件里:

line = " '%s': '%s',\n" % (name, code)

result += line

同时你也可以输出它们,以便在抓取的过程中查看进度:

print name + ':' + code

完整代码可在crossin.me上查看。

如果你只是想抓几个测试一下,并不用全部抓下来,在provices后面加上[:3],抓3个省的试试看就好了。

好了,我要去收拾行李了,大家一周后见。

面向零基础初学者的编程课

每天5分钟,轻松学编程

回复『 p 』查看课程目录

回复『 t 』查看习题列表

本文分享自微信公众号 - Crossin的编程教室(crossincode)

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

原始发表时间:2013-07-27

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python3选择排序

    选择排序 概述 选择排序(Selection sort)是一种简单直观的排序算法。 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在...

    苦叶子
  • python学习笔记之运算符

    目录 前言 软件环境 身份运算符 算术运算符 比较运算符 位移运算符 自变运算符 位运算符 逻辑运算符 成员关系运算符 Python真值表 最后 前言 在前面的...

    Angel_Kitty
  • 如何参与到开源优测-积微速成计划任务

    通过过完第一次任务,你应该掌握: 安装和部署git 学会git基本的命令 学会如何使用github来管理的你的学习任务 初步了解如何利用python编程 本...

    苦叶子
  • Python3冒泡排序

    Python3冒泡排序 概述 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他...

    苦叶子
  • 【机器学习笔记之二】决策树的python实现

    本文结构: 是什么? 有什么算法? 数学原理? 编码实现算法? ---- 1. 是什么? 简单地理解,就是根据一些 feature 进行分类,每个节点提一个问题...

    Angel_Kitty
  • Python3插入排序

    Python3插入排序 前言 为什么要开始写Python3算法系列呢? 一是很长很长时间没专门练习练习这种基本功 二是想把这个系列以基本代码的方式给写出来,提...

    苦叶子
  • 基于Windows下python环境变量配置

    方法和Java环境变量配置是一样的,不懂的请移步这里 虽然这样说,还是唠唠叨叨几句吧QAQ 默认情况下,在windows下安装python之后,系统并不会自动添...

    Angel_Kitty
  • 基于Windows下python3.4.1IDLE常用快捷键小结

    安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器。 IDLE默认不能显示行号,使用ALT+G 跳到对应...

    Angel_Kitty
  • Python3希尔排序

    希尔排序 概述 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminshing Increment Sort),是直接插入排序算...

    苦叶子
  • 51 Nod 1005 大数加法【Java大数乱搞,python大数乱搞】

    1005 大数加法 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出2个大整数A,B,计算A+B的结果。 Input 第1行:...

    Angel_Kitty

扫码关注云+社区

领取腾讯云代金券