请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生

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

  [复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-8-6 15:20:34 |显示全部楼层
book 发表于 2013-8-6 13:22
您好,这里是[0] 还是[1],我运行了好多次,抓的过程中,总是出错,每次都出在urllib2.urlopen().read(), ...

最后一步的城市代码是后面一个值,所以是[1]
你把那个语句分开两步,比如
  1. content=urllib2.urlopen(。。。)
  2. data=content.read()
复制代码
看下到底哪句出错,错误提示是什么。
如果不是提供的url有问题,那就是网络问题
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

170

积分

注册会员

Rank: 2

发表于 2013-8-8 09:50:11 |显示全部楼层
crossin先生 发表于 2013-8-6 15:20
最后一步的城市代码是后面一个值,所以是[1]
你把那个语句分开两步,比如看下到底哪句出错,错误提示是什 ...

看来是网络的问题,谢啦
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

发表于 2013-8-15 21:42:48 |显示全部楼层
我的代码,抓取出来的城市名称是乱码。不知道是什么原因。
代码前已经加了:# -*- coding: cp936 -*-
请指点
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-8-15 23:33:04 |显示全部楼层
sd.times 发表于 2013-8-15 21:42
我的代码,抓取出来的城市名称是乱码。不知道是什么原因。
代码前已经加了:# -*- coding: cp936 -*-
请指 ...

那种乱码?把代码和程序错误都发上来看看
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

发表于 2013-8-17 05:05:39 |显示全部楼层
crossin先生 发表于 2013-8-15 23:33
那种乱码?把代码和程序错误都发上来看看

代码就是贴的你写的:
# -*- coding: cp936 -*-
import urllib2

url1 = 'http://m.weather.com.cn/data5/city.xml'
content1 = urllib2.urlopen(url1).read()
provinces = content1.split(',')
result = 'city = {\n'
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(',')
    for c in cities:
        c_code = c.split('|')[0]
        url3 = url % c_code
        content3 = urllib2.urlopen(url3).read()
        districts = content3.split(',')
        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]
            line = "    '%s': '%s',\n" % (name, code)
            result += line
            print  name + ':' + code
result += '}'
f = file('/home/crossin/Desktop/city.py', 'w')
f.write(result)
f.close()
然后乱码是这样:
鍏拌タ:101050507
闈掑唸:101050508
搴嗗畨:101050509
缁ユ1:101050510
榛戞渤:101050601
瀚╂睙:101050602
瀛欏惔:101050603
閫婂厠:101050604
浜斿ぇ杩炴睜:101050605
鍖楀畨:101050606
澶у叴瀹夊箔:101050701
濉旀渤:101050702
婕犳渤:101050703
鍛肩帥:101050704
鍛间腑:101050705
鏂版灄:101050706
浼婃槬:101050801
乌伊岭:101050802
浜旇惀:101050803
閾佸姏:101050804
鍢夎崼:101050805
澶у簡:101050901
鏋楃敻:101050902
鑲囧窞:101050903
鑲囨簮:101050904
鍕冨埄:101051002
楦¤タ:101051101
铏庢灄:101051102
瀵嗗北:101051103
楦′笢:101051104
楣ゅ矖:101051201
缁ユ花:101051202
钀濆寳:101051203
双鸭山:101051301
闆嗚搐:101051302
瀹濇竻:101051303
渚ユ渤:101051304
闀挎槬:101060101
鍐滃畨:101060102
寰锋儬:101060103
涔濆彴:101060104
姒嗘爲:101060105
鍙岄槼:101060106
鍚夋灄:101060201
鑸掑叞:101060202
姘稿悏:101060203
铔熸渤:101060204
纾愮煶:101060205
妗︾敻:101060206
寤跺悏:101060301
鏁﹀寲:101060302
瀹夊浘:101060303
汪清:101060304
鍜岄緳:101060305
榫欎簳:101060307
鐝叉槬:101060308
鍥句滑:101060309


回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-8-17 15:09:21 |显示全部楼层
sd.times 发表于 2013-8-17 05:05
代码就是贴的你写的:
# -*- coding: cp936 -*-
import urllib2

是windows对python的中文支持不好。
你可以改成
  1. print  name.decode('utf-8') + ':' + code
复制代码
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

发表于 2013-8-17 19:07:01 |显示全部楼层
crossin先生 发表于 2013-8-17 15:09
是windows对python的中文支持不好。
你可以改成

Problem Solved, 太棒了,感谢。
回复

使用道具 举报

3

主题

0

好友

243

积分

中级会员

Rank: 3Rank: 3

发表于 2013-8-20 12:28:20 |显示全部楼层
本帖最后由 jpjlqone 于 2013-8-20 12:30 编辑

完整代码在win下运行是会报错的,而且也得自己改gbk编码,utf8是乱码的。希望crossin先生多测试下各种问题,避免给新手增加额外困扰。因为这是教程该有的准确性和保证,这就比不得自己随手写写了。 2013-08-20_122344.png
回复

使用道具 举报

0

主题

1

好友

132

积分

注册会员

Rank: 2

发表于 2013-9-2 17:23:00 |显示全部楼层
在不用[:3]减少查询城市的时候,始终会报一个错误:
  code = content4.split('|')[1]
IndexError: list index out of range

用了[:3]后,则可以正确写入数据,不知道是为什么。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2013-9-2 18:51:56 |显示全部楼层
aresli 发表于 2013-9-2 17:23
在不用[:3]减少查询城市的时候,始终会报一个错误:
  code = content4.split('|')[1]
IndexError: list in ...

很可能是,查询多了,对方服务器有时候没有回复成功。
你把contect4打出来看看,错的时候是什么数据
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-5-30 22:02 , Processed in 0.020449 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部