Crossin的编程教室

标题: 【Python 第46课】 查天气(4) [打印本页]

作者: crossin先生    时间: 2013-7-27 00:01
标题: 【Python 第46课】 查天气(4)
python 查天气系列:
【Python 第43课】 查天气(1) http://bbs.crossincode.com/forum.php?mod=viewthread&tid=8
【Python 第44课】 查天气(2) http://bbs.crossincode.com/forum.php?mod=viewthread&tid=9
【Python 第45课】 查天气(3) http://bbs.crossincode.com/forum.php?mod=viewthread&tid=12
【Python 第46课】 查天气(4) http://bbs.crossincode.com/forum.php?mod=viewthread&tid=42


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

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

首先,抓取省份的列表:
  1. url1 = 'http://m.weather.com.cn/data3/city.xml'
  2. content1 = urllib2.urlopen(url1).read()
  3. provinces = content1.split(',')
复制代码
输出content1可以查看全部省份代码:
  1. 01|北京,02|上海,03|天津,...
复制代码
对于每个省,抓取城市列表:
  1. url = 'http://m.weather.com.cn/data3/city%s.xml'
  2. for p in provinces:
  3.     p_code = p.split('|')[0]
  4.     url2 = url % p_code
  5.     content2 = urllib2.urlopen(url2).read()
  6.     cities = content2.split(',')
复制代码
输出content2可以查看此省份下所有城市代码:
  1. 1901|南京,1902|无锡,1903|镇江,...
复制代码
再对于每个城市,抓取地区列表:
  1. for c in cities[:3]:
  2.     c_code = c.split('|')[0]
  3.     url3 = url % c_code
  4.     content3 = urllib2.urlopen(url3).read()
  5.     districts = content3.split(',')
复制代码
content3是此城市下所有地区代码:
  1. 190101|南京,190102|溧水,190103|高淳,...
复制代码
最后,对于每个地区,我们把它的名字记录下来,然后再发送一次请求,得到它的最终代码:
  1. for d in districts:
  2.     d_pair = d.split('|')
  3.     d_code = d_pair[0]
  4.     name = d_pair[1]
  5.     url4 = url % d_code
  6.     content4 = urllib2.urlopen(url4).read()
  7.     code = content4.split('|')[1]
复制代码
name和code就是我们最终要得到的城市代码信息。它们格式化到字符串中,最终保存在文件里:
  1. line = "    '%s': '%s',\n" % (name, code)
  2. result += line
复制代码
同时你也可以输出它们,以便在抓取的过程中查看进度:
  1. print  name + ':' + code
复制代码
完整代码:
  1. import urllib2

  2. url1 = 'http://m.weather.com.cn/data3/city.xml'
  3. content1 = urllib2.urlopen(url1).read()
  4. provinces = content1.split(',')
  5. result = 'city = {\n'
  6. url = 'http://m.weather.com.cn/data3/city%s.xml'
  7. for p in provinces:
  8.     p_code = p.split('|')[0]
  9.     url2 = url % p_code
  10.     content2 = urllib2.urlopen(url2).read()
  11.     cities = content2.split(',')
  12.     for c in cities:
  13.         c_code = c.split('|')[0]
  14.         url3 = url % c_code
  15.         content3 = urllib2.urlopen(url3).read()
  16.         districts = content3.split(',')
  17.         for d in districts:
  18.             d_pair = d.split('|')
  19.             d_code = d_pair[0]
  20.             name = d_pair[1]
  21.             url4 = url % d_code
  22.             content4 = urllib2.urlopen(url4).read()
  23.             code = content4.split('|')[1]
  24.             line = "    '%s': '%s',\n" % (name, code)
  25.             result += line
  26.             print  name + ':' + code
  27. result += '}'
  28. f = file('/home/crossin/Desktop/city.py', 'w')
  29. f.write(result)
  30. f.close()
复制代码
如果你只是想抓几个测试一下,并不用全部抓下来,在provices后面加上[:3],抓3个省的试试看就好了。

补充:如果发现输出的是乱码(这种事往往发生在windows下),试着把输出那行改为
  1. print  name.decode('utf-8') + ':' + code
复制代码


#==== Crossin的编程教室 ====#
微信ID:crossincode
QQ群:312723402

面向零基础初学者的编程课
每天5分钟,轻松学编程



作者: byron    时间: 2013-7-27 00:58
沙发一定是我的。
作者: lpd0933    时间: 2013-7-27 11:49
看了这个帖子,我明白:为什么按照查天气(1)的方法最后部分城市的编码不一致。

查天气(1)中提到‘’‘得到最终的三级编号之后,再加上中国101的前缀,就得到了城市代码,如南京市区就是“101190101” ’‘’,对于直辖市得到三级编码加101是不正确的。

这个帖子最后再查一次才是一致的。
作者: crossin先生    时间: 2013-7-27 14:55
lpd0933 发表于 2013-7-27 11:49
看了这个帖子,我明白:为什么按照查天气(1)的方法最后部分城市的编码不一致。

查天气(1)中提到‘’‘ ...

是的,我也是后来发现直辖市是有问题的
作者: hellopython    时间: 2013-7-27 21:05
提点拙建
1.最好再加上异常处理
2.最好加上超时
3.每次调用urllib2.urlopen(url1).read()的前最好先延时一下
作者: grdzyz    时间: 2013-7-31 23:29
请问p_code = p.split('|')[0]中的[0]表示什么?
作者: book    时间: 2013-8-5 13:12
code = content4.split('|')[1]  ??
作者: crossin先生    时间: 2013-8-5 16:20
grdzyz 发表于 2013-7-31 23:29
请问p_code = p.split('|')[0]中的[0]表示什么?

split得出的结果诸如['01', '北京']形式的list,[0]就是取到它的省级别编码
作者: crossin先生    时间: 2013-8-5 16:23
book 发表于 2013-8-5 13:12
code = content4.split('|')[1]  ??

split得出的结果诸如['190101', '101190101']形式的list,[1]就是取到它的城市编码
作者: book    时间: 2013-8-6 13:22
crossin先生 发表于 2013-8-5 16:23
split得出的结果诸如['190101', '101190101']形式的list,[1]就是取到它的城市编码

您好,这里是[0] 还是[1],我运行了好多次,抓的过程中,总是出错,每次都出在urllib2.urlopen().read(),是网络问题吗?请指点
作者: crossin先生    时间: 2013-8-6 15:20
book 发表于 2013-8-6 13:22
您好,这里是[0] 还是[1],我运行了好多次,抓的过程中,总是出错,每次都出在urllib2.urlopen().read(), ...

最后一步的城市代码是后面一个值,所以是[1]
你把那个语句分开两步,比如
  1. content=urllib2.urlopen(。。。)
  2. data=content.read()
复制代码
看下到底哪句出错,错误提示是什么。
如果不是提供的url有问题,那就是网络问题
作者: book    时间: 2013-8-8 09:50
crossin先生 发表于 2013-8-6 15:20
最后一步的城市代码是后面一个值,所以是[1]
你把那个语句分开两步,比如看下到底哪句出错,错误提示是什 ...

看来是网络的问题,谢啦
作者: sd.times    时间: 2013-8-15 21:42
我的代码,抓取出来的城市名称是乱码。不知道是什么原因。
代码前已经加了:# -*- coding: cp936 -*-
请指点
作者: crossin先生    时间: 2013-8-15 23:33
sd.times 发表于 2013-8-15 21:42
我的代码,抓取出来的城市名称是乱码。不知道是什么原因。
代码前已经加了:# -*- coding: cp936 -*-
请指 ...

那种乱码?把代码和程序错误都发上来看看
作者: sd.times    时间: 2013-8-17 05:05
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



作者: crossin先生    时间: 2013-8-17 15:09
sd.times 发表于 2013-8-17 05:05
代码就是贴的你写的:
# -*- coding: cp936 -*-
import urllib2

是windows对python的中文支持不好。
你可以改成
  1. print  name.decode('utf-8') + ':' + code
复制代码

作者: sd.times    时间: 2013-8-17 19:07
crossin先生 发表于 2013-8-17 15:09
是windows对python的中文支持不好。
你可以改成

Problem Solved, 太棒了,感谢。
作者: jpjlqone    时间: 2013-8-20 12:28
本帖最后由 jpjlqone 于 2013-8-20 12:30 编辑

完整代码在win下运行是会报错的,而且也得自己改gbk编码,utf8是乱码的。希望crossin先生多测试下各种问题,避免给新手增加额外困扰。因为这是教程该有的准确性和保证,这就比不得自己随手写写了。 2013-08-20_122344.png
作者: aresli    时间: 2013-9-2 17:23
在不用[:3]减少查询城市的时候,始终会报一个错误:
  code = content4.split('|')[1]
IndexError: list index out of range

用了[:3]后,则可以正确写入数据,不知道是为什么。
作者: crossin先生    时间: 2013-9-2 18:51
aresli 发表于 2013-9-2 17:23
在不用[:3]减少查询城市的时候,始终会报一个错误:
  code = content4.split('|')[1]
IndexError: list in ...

很可能是,查询多了,对方服务器有时候没有回复成功。
你把contect4打出来看看,错的时候是什么数据
作者: aresli    时间: 2013-9-2 20:24
crossin先生 发表于 2013-9-2 18:51
很可能是,查询多了,对方服务器有时候没有回复成功。
你把contect4打出来看看,错的时候是什么数据 ...

试了5次,有3次是放回一张html文件的源代码,应该是长404页面,

<div class="main">
  <h1>很抱歉,您要访问的页面不存在。</h1>
    <p>请直接点击下面的连接进入中国天气网首页:<a href="http://www.weather.com.cn/">www.weather.com.cn</a></p>
<div class="ewm">
        <h3><a href="http://3g.weather.com.cn/">中国天气网客户端</a></h3>
        <dl>
          <dt><a href="http://3g.weather.com.cn/"><img src="/poster/chart.png"></a></dt>
          <dd><a href="http://3g.weather.com.cn/">点击或扫描下载</a></dd>
        </dl>

      </div>
</div>


有2次是返回下面的报错:

Traceback (most recent call last):
  File "/Users/aresli/Sites/Dropbox/file/python/lesson46.py", line 33, in <module>
    content4 = urllib2.urlopen(url4).read()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default
urllib2.HTTPError: HTTP Error 404: Not Found


是不是网络问题或者是中国天气网的数据问题?
作者: crossin先生    时间: 2013-9-2 20:37
aresli 发表于 2013-9-2 20:24
试了5次,有3次是放回一张html文件的源代码,应该是长404页面,

最近经常这样,请求多了它那里就拿不到数据。在循环里面sleep一下,可能会好些。
作者: aresli    时间: 2013-9-2 22:46
crossin先生 发表于 2013-9-2 20:37
最近经常这样,请求多了它那里就拿不到数据。在循环里面sleep一下,可能会好些。 ...

在第二层和第三层循环中分别加了 time.sleep(0.1),结果还是一样。

不纠结了,掌握程序的思路就可以了。
作者: 林夕_信仰    时间: 2013-9-3 15:51
我输出的content1是乱码的,为什么呢?
作者: 林夕_信仰    时间: 2013-9-3 16:35
hellopython 发表于 2013-7-27 21:05
提点拙建
1.最好再加上异常处理
2.最好加上超时

具体怎么写延迟呢?
作者: 林夕_信仰    时间: 2013-9-3 17:29
本帖最后由 林夕_信仰 于 2013-9-3 17:38 编辑

先生,我抓取省份的列表之后,输出content1,结果是乱码的(我在文件头已经加了#encoding:utf-8 ),怎么办呢?@crossin先生
#encoding:utf-8
import urllib2


url = 'http://m.weather.com.cn/data5/city.xml'
f = urllib2.urlopen(url)
content = f.read()
f.close()

print content


省份.PNG (5.21 KB, 下载次数: 343)

省份.PNG


作者: crossin先生    时间: 2013-9-3 20:26
林夕_信仰 发表于 2013-9-3 17:29
先生,我抓取省份的列表之后,输出content1,结果是乱码的(我在文件头已经加了#encoding:utf-8 ),怎么 ...

你这问题好像和楼上某个问题是一样的,你看一下上面的评论。
  1. print content.decode('utf-8')
复制代码
用这个方法试试看。
作者: crossin先生    时间: 2013-9-3 20:28
林夕_信仰 发表于 2013-9-3 16:35
具体怎么写延迟呢?
  1. import time

  2. time.sleep(0.5)
复制代码

作者: 林夕_信仰    时间: 2013-9-4 08:56
crossin先生 发表于 2013-9-3 20:28

thanks~
作者: Joyann    时间: 2013-9-4 11:53
想问一下,我们抓天气预报的网址是怎么来的呢??
作者: crossin先生    时间: 2013-9-4 14:04
Joyann 发表于 2013-9-4 11:53
想问一下,我们抓天气预报的网址是怎么来的呢??

从网上搜索出来的,有人在文章里写过。我试图从官网上找正式接口文档,没找到
作者: Joyann    时间: 2013-9-4 20:22
crossin先生 发表于 2013-9-4 14:04
从网上搜索出来的,有人在文章里写过。我试图从官网上找正式接口文档,没找到 ...

那大部分的网址是不是我们都可以搜得到呢?也就是说我们是不是可以利用这种类型的代码抓到更多网站的东西?
作者: crossin先生    时间: 2013-9-5 19:49
Joyann 发表于 2013-9-4 20:22
那大部分的网址是不是我们都可以搜得到呢?也就是说我们是不是可以利用这种类型的代码抓到更多网站的东西 ...

一般来说,不同网站的代码结构会有不少差异。所以,尽管原理上是想通的,但对于抓取不同的网站,还是要先去分析目标网站的代码,再对症下药。

会利用搜索引擎解决问题是个需要掌握的技能
作者: learner    时间: 2014-2-26 21:28
crossin先生 发表于 2013-8-17 15:09
是windows对python的中文支持不好。
你可以改成

请指教:改完之后,虽然print输出不再是乱码,但写入的city.py中依然是乱码,怎么办?
作者: crossin先生    时间: 2014-2-27 10:07
learner 发表于 2014-2-26 21:28
请指教:改完之后,虽然print输出不再是乱码,但写入的city.py中依然是乱码,怎么办? ...

可能需要在写入文件的时候指定编码。
网上找了段代码供参考。windows的话可能要指定为cp936
  1. outFilePath = '.\\out\\out'
  2. outFile = open(outFilePath, 'w')
  3. s = u'我们'
  4. #指定写入文件时的编码
  5. outFile.write(s.encode('utf-8'))
复制代码

作者: liu-pengfei    时间: 2014-9-25 23:00
先生,我有2个问题。
1,查询省(直辖市)的地址‘http://m.weather.com.cn/data5/city.xml’,和查询更低级别的市(地区)的地址‘http://m.weather.com.cn/data3/city%s.xml’中有data3,和data5,我发现通用啊,不知道怎么回事。
2,读取省得到的是“省编号|省名称,省编号|省名称,省编号|省名称...”,读取市,读取地区也都是这样,但是最后一次放入地区的编号“url4 = url % d_code,content4 = urllib2.urlopen(url4).read()”读出的是“地区编号|地区的查询时的编码(就是写入city.py中的)”.搞清这些才能更懂代码的某些行。
作者: Envy    时间: 2015-3-25 17:55
看到这我怎么感觉大家好像基础都很好的样子、。、、、
作者: lovepythoner    时间: 2015-4-18 06:43
前面的都看了非常好,阶梯设计的很好,循序渐进
这次的http://m.weather.com.cn/data5/city.xml连接失效请老师修复下
作者: crossin先生    时间: 2015-4-18 23:42
lovepythoner 发表于 2015-4-18 06:43
前面的都看了非常好,阶梯设计的很好,循序渐进
这次的http://m.weather.com.cn/data5/city.xml连接失效请老 ...

新的访问接口可参考这两篇文章:
http://blog.csdn.net/hello_haozi/article/details/7564223
http://blog.csdn.net/fancylovejava/article/details/26102635
作者: 陈小六    时间: 2015-10-8 15:52
  1. import urllib2
  2. import time
  3. url1 = 'http://m.weather.com.cn/data5/city.xml'
  4. content1 = urllib2.urlopen(url1).read()
  5. provinces = content1.split(',')
  6. result = 'city = {\n'
  7. url = 'http://m.weather.com.cn/data3/city%s.xml'
  8. for p in provinces:
  9.     p_code = p.split('|')[0]
  10.     url2 = url % p_code
  11.     time.sleep(0.5)
  12.     content2 = urllib2.urlopen(url2).read()
  13.     cities = content2.split(',')
  14.     for c in cities:
  15.         c_code = c.split('|')[0]
  16.         url3 = url % c_code
  17.         time.sleep(0.5)
  18.         content3 = urllib2.urlopen(url3).read()
  19.         districts = content3.split(',')
  20.         for d in districts:
  21.             d_pair = d.split('|')
  22.             d_code = d_pair[0]
  23.             name = d_pair[1]
  24.             url4 = url % d_code
  25.             time.sleep(0.5)
  26.             content4 = urllib2.urlopen(url4).read()
  27.             code = content4.split('|')[1]
  28.             line = "    '%s': '%s',\n" % (name, code)
  29.             result += line
  30.             print  name.decode('utf-8') + ':' + code
  31. result += '}'
  32. f = file('d:\city.py', 'w')
  33. f.write(result.encode('utf-8'))
  34. f.close()
  35. print '>>>>>>>>>>DONE!<<<<<<<<<<'
复制代码
基本就是按照教程上来的,加了几个暂停,输出一部分以后就报错了~
北京:101010100
海淀:101010200
朝阳:101010300
顺义:101010400
怀柔:101010500
通州:101010600
昌平:101010700
延庆:101010800
丰台:101010900
石景山:101011000
大兴:101011100
房山:101011200
密云:101011300
门头沟:101011400
平谷:101011500
八达岭:101011600
佛爷顶:101011700
汤河口:101011800
密云上甸子:101011900
斋堂:101012000
霞云岭:101012100
上海:101020100
闵行:101020200
宝山:101020300
嘉定:101020400
南汇:101020500
金山:101020600
青浦:101020800
松江:101020800
奉贤:101020900
崇明:101021000
天津:101030100
武清:101030200
宝坻:101030300
东丽:101030400
西青:101030500
北辰:101030600
宁河:101030700
汉沽:101030800
静海:101030900
津南:101031000
塘沽:101031100
大港:101031200
蓟县:101031300
重庆:101040100
永川:101040200
合川:101040300
南川:101040400
江津:101040500
万盛:101040600
渝北:101040700
北碚:101040800
巴南:101040900
长寿:101041000
黔江:101041100
万州天城:101041200
万州龙宝:101041300
涪陵:101041400

Traceback (most recent call last):
  File "D:/BaiduYunDownload/Python/练习文档/catch.py", line 27, in <module>
    code = content4.split('|')[1]
IndexError: list index out of range

作者: crossin先生    时间: 2015-10-9 11:50
陈小六 发表于 2015-10-8 15:52
基本就是按照教程上来的,加了几个暂停,输出一部分以后就报错了~
北京:101010100
海淀:101010200

数组越界了,没有[1]这个元素
你把content4也打印出来,看看是什么情况下出错了
然后对这种情况加上异常处理
作者: 我是佩佩学姐    时间: 2015-11-8 19:35
本帖最后由 我是佩佩学姐 于 2015-11-8 23:34 编辑

基本上也是参照楼上陈小六的代码,我这边出现问题:
1、在content4 那行出现错误,IndexError: list index out of range 。对应print content4:
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <script type="text/javascript">
  6.         window.onload = function() {
  7.         window.open("/","_self");
  8.         };
  9.         </script>
  10. <!-- START WRating v1.0 -->
  11. <script type="text/javascript" src="http://c.wrating.com/a1.js">
  12. </script>
  13. <script type="text/javascript">
  14. var vjAcc="860010-2151010100";
  15. var wrUrl="http://c.wrating.com/";
  16. vjTrack("");
  17. </script>
  18. <noscript><img src="http://c.wrating.com/a.gif?a=&c=860010-2151010100" width="1" height="1"/></noscript>
  19. <!-- END WRating v1.0 -->
  20. </body>
  21. </html>
复制代码
2、502 bad gateway 或者504 gate time-out
  1.         for d in districts:
  2.             d_pair=d.split('|')
  3.             d_code=d_pair[0]
  4.             name=d_pair[1]
  5.             url4=url % d_code
  6.             time.sleep(0.5)                  
  7.             content4=urllib2.urlopen(url4).read()    #这个地方经常出现错误。502 bad gateway 或者504 gate time-out
  8.             code = content4.split('|')[1]
  9.             line="    '%s': '%s',\n" % (name,code)
  10.             result+=line
  11.             print name.decode('utf-8')+':'+code
复制代码

作者: crossin先生    时间: 2015-11-9 21:01
我是佩佩学姐 发表于 2015-11-8 19:35
基本上也是参照楼上陈小六的代码,我这边出现问题:
1、在content4 那行出现错误,IndexError: list index  ...

这个看起来是接口那里超时或者封掉了
作者: 我是佩佩学姐    时间: 2015-11-11 21:27
crossin先生 发表于 2015-11-9 21:01
这个看起来是接口那里超时或者封掉了

可是每次都能查一会才会出现问题,IndexError: list index out of range 或者是502 bad gateway 、504 gate time-out。感觉不是被封掉?超时有什么办法么?
作者: crossin先生    时间: 2015-11-12 13:04
我是佩佩学姐 发表于 2015-11-11 21:27
可是每次都能查一会才会出现问题,IndexError: list index out of range 或者是502 bad gateway 、504 ga ...

增加异常处理,如果没成功,就sleep两秒钟重试
作者: 我是佩佩学姐    时间: 2015-11-12 20:46
本帖最后由 我是佩佩学姐 于 2015-11-12 20:48 编辑

非常感谢Cossin先生指点。作为一个从未编程的人,调试完查天气的四节,相当吃力但是收获很多。(推荐用IDLE调试运行)
我按照先生的指点,在每个urlopen面前都增加了异常处理,目前程序调试成功。
现阶段有还有两个关于编码的疑问,还是吃不透,有点晕:
1、为什么在IDLE里面每次运行程序都要提示默认加cp936,但是我们在程序里面的变量如name就必须要用utf8解码才有效?(我试过改成cp936,要么乱码,或者会报错什么gbk....记不清了哈)
2、最后一步,将结果写入,f.write(result) ,我需要去掉result后面的.encode('cp936')才能写入(否则报错:UnicodeDecodeError: 'gbk' codec can't decode bytes in position 122-123: illegal multibyte sequence),如果换成utf-8,一样出错。

按老师指点,增加异常处理后的代码(部分):
  1.             try:
  2.                 time.sleep(1.0)
  3.                 content4=urllib2.urlopen(url4).read()
  4.                 code = content4.split('|')[1]
  5.                 line="    '%s': '%s',\n" % (name,code)
  6.                 result+=line
  7.                 print name.decode('utf-8')+':'+code
  8.             except:
  9.                 print'%s:查询失败'%name.decode('utf-8')

  10. result+='}'
  11. f=file('city2.py','w')
  12. f.write(result) #需要去掉encode...
  13. f.close()
复制代码

作者: crossin先生    时间: 2015-11-13 15:58
我是佩佩学姐 发表于 2015-11-12 20:46
非常感谢Cossin先生指点。作为一个从未编程的人,调试完查天气的四节,相当吃力但是收获很多。(推荐用IDLE ...

python2里面的编码的确是个比较讨厌的东西,有机会我再好好整理一下。

粗略来说,idle提示cp936,是指你文件本身的编码,在win下默认是cp936,你也可以指定utf8
变量的编码,是变量存储的字符串的编码,这个牵涉到从网站上读取下来的时候,网页的编码是什么
而且因为不同系统的默认编码不一样,所以同一段代码未必每个平台都能正常运行
作者: 周末晒被子    时间: 2015-12-10 21:40
我是佩佩学姐 发表于 2015-11-12 20:46
非常感谢Cossin先生指点。作为一个从未编程的人,调试完查天气的四节,相当吃力但是收获很多。(推荐用IDLE ...

请教一下佩佩学姐,因为你跟我的学习时间比较近....
第46课的链接都失效了,推荐文章的链接也失效了,你怎么完成这个程序的....
作者: crossin先生    时间: 2015-12-11 21:54
book 发表于 2013-8-6 13:22
您好,这里是[0] 还是[1],我运行了好多次,抓的过程中,总是出错,每次都出在urllib2.urlopen().read(), ...

你把每一步的值都print出来看,看到底是哪里跟预想的不对了
有可能是网络问题,网络问题的话会有相应的报错的
作者: crossin先生    时间: 2015-12-11 21:55
周末晒被子 发表于 2015-12-10 21:40
请教一下佩佩学姐,因为你跟我的学习时间比较近....
第46课的链接都失效了,推荐文章的链接也失效了,你 ...

这个链接要去找新的
查天气1最上面给了两个博客,不过我现在没验证最新的还能不能正常
作者: 周末晒被子    时间: 2015-12-12 12:00
本帖最后由 周末晒被子 于 2015-12-12 13:20 编辑
crossin先生 发表于 2015-12-11 21:55
这个链接要去找新的
查天气1最上面给了两个博客,不过我现在没验证最新的还能不能正常 ...

嗯,昨天找到了一个新的来源:

中国和世界天气预报__API服务_API服务_API Store http://apistore.baidu.com/apiworks/servicedetail/478.html

但是这个网站直接给出了各城市代码,不用自己去找...有点烦没锻炼到。
我是直接在城市代码列表的那个网页的源文件里,复制了所有城市代码的。
昨天也成功写出了查天气的程序,但是因为这个返回的json信息啊,太多了,Crossin先生的课程数据,只有两层字典,这个如果想得到tmp,要进入返回数据的第5层....
贴一个吧:

百度来源的查天气程序.zip

913 Bytes, 下载次数: 9

欢迎指正~谢谢


作者: 周末晒被子    时间: 2015-12-12 12:41
本帖最后由 周末晒被子 于 2015-12-12 13:02 编辑

在完整代码的第25行,
明明可以写成这样:
line = '      %s : %s,\n '%(name,code)
为什么要写成这样呢:
line = "    '%s': '%s',\n" % (name, code)
都是<type 'str'>嘛。
作者: 周末晒被子    时间: 2015-12-12 13:33
本帖最后由 周末晒被子 于 2015-12-12 13:51 编辑

在第26行,result += line,for循环结束之后的 result 应该是一个列表了吧?一个有着很多如 "    '%s': '%s',\n" % (name, code) 的字符串的列表了吧?

然后是第28行,result += '}',这行代码是什么意思呢?

作者: 周末晒被子    时间: 2015-12-12 13:47
本帖最后由 周末晒被子 于 2015-12-12 13:50 编辑

我试着复制了先生的完整代码运行了一下,竟然还可以print出城市代码!为什么,因为我复制 http://m.weather.com.cn/data5/city.xml 进浏览器:

This page contains the following errors:
error on line 1 at column 1: Document is empty
Below is a rendering of the page up to the first error.
但是程序却成功运行,表明程序访问网站成功了...为什么?
作者: 周末晒被子    时间: 2015-12-12 14:03
完整代码的第8行:for p in provinces:
我改成这样是可以输出的:for p in provinces[:1]:
但是改成这样子就立刻报错:for p in provinces[0]: 或者 for p in provinces[1]:
for p in provinces[:1]: 和 1for p in provinces[0]:  P不是读取一样的东西吗——只读取了 01|北京 嘛。但是一个可运行一个却报错。
作者: crossin先生    时间: 2015-12-12 22:23
周末晒被子 发表于 2015-12-12 14:03
完整代码的第8行:for p in provinces:
我改成这样是可以输出的:for p in provinces[:1]:
但是改成这样子 ...

[:1]取出来的是一个list,有0或1个元素。[0]就是直接取第一个元素,如果没有就报错,并不是list,所以也不能  for...in
作者: 周末晒被子    时间: 2015-12-13 22:07
crossin先生 发表于 2015-12-12 22:23
[:1]取出来的是一个list,有0或1个元素。[0]就是直接取第一个元素,如果没有就报错,并不是list,所以也 ...

噢!就是说 for...in... 要跟list,一旦跟一个元素的话,for p in provinces[n](无论n是多少)就会报错。
作者: crossin先生    时间: 2015-12-13 23:19
周末晒被子 发表于 2015-12-13 22:07
噢!就是说 for...in... 要跟list,一旦跟一个元素的话,for p in provinces[n](无论n是多少)就会报错 ...

是的
作者: 周末晒被子    时间: 2015-12-14 15:02
crossin先生 发表于 2015-12-13 23:19
是的

那个,先生没有看51~54楼的内容吗?
作者: crossin先生    时间: 2015-12-14 23:41
周末晒被子 发表于 2015-12-14 15:02
那个,先生没有看51~54楼的内容吗?

他应该是为了拼出一个json格式的字符串
作者: yuan505158363    时间: 2015-12-18 22:18
本帖最后由 yuan505158363 于 2015-12-18 22:28 编辑

crossin先生 您好   
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(',')

在上面这一段程序里,我有两个地方看不懂。
1.     url = 'http://m.weather.com.cn/data3/city%s.xml'中  %s有什么作用呢,为什么后面所代表的变量呢?
2.  url2 = url % p_code  中  用这个网址直接取余一个数是什么意思啊?
还望解答,万分感谢。
作者: crossin先生    时间: 2015-12-19 23:43
yuan505158363 发表于 2015-12-18 22:18
crossin先生 您好   
url = 'http://m.weather.com.cn/data3/city%s.xml'
for p in provinces:

%这里是字符串拼接。前面课程有说过。只不过这里分成了两部分
作者: catherinemic    时间: 2016-1-23 21:48
今天也都顺利,开心~~
作者: zc7290    时间: 2016-3-29 11:02
  请问: url2 = url % p_code
   % p_code 是什么意思呢
作者: crossin先生    时间: 2016-3-29 13:10
zc7290 发表于 2016-3-29 11:02
请问: url2 = url % p_code
   % p_code 是什么意思呢

url是个字符串,这里就是字符串格式化,只不过把含格式字符先用个变量保存下来了
作者: zc7290    时间: 2016-3-29 19:16
crossin先生 发表于 2016-3-29 13:10
url是个字符串,这里就是字符串格式化,只不过把含格式字符先用个变量保存下来了 ...

谢谢!!!
作者: exchen    时间: 2016-4-12 15:22
result = 'city = {\n' 是什么意思
作者: exchen    时间: 2016-4-12 15:26
还有p.split是什么
作者: crossin先生    时间: 2016-4-12 22:52
exchen 发表于 2016-4-12 15:26
还有p.split是什么

split是字符串分割成list的方法。课程里有说过,28课。

上一个问题没看懂什么意思
作者: LC0919    时间: 2016-4-27 16:07
exchen 发表于 2016-4-12 15:22
result = 'city = {\n' 是什么意思

在老师的程序里,最终的结果是以字典格式保存到city.py中,就是下面这种格式:
city = {
  '北京': '101010100',
  '海淀': '101010200',
}

所以 result = 'city = { \n'  这个地方表示就是先让 result 包含第一行(city = { )的内容;
然后程序后面得到城市名称和编码后,先调整格式,然后再把城市名称和编码累加到 result 中:
line = "  '%s': '%s',\n" % (name,code)
result += line
最后程序再给 result 加上一个 } :
result +=  '}'

这样整个 result 就是一个完整的字典格式了。

作者: LC0919    时间: 2016-4-27 16:09
从2月中旬到现在,一直断断续续在学习。每次遇到稍微大一点的习题,比如上次的文件保存游戏分数,和这次的查天气,总是没办法自己把程序写出来。必须看完提示,才会有一点思路,然后一边想,一边写。可能自己太笨了,即便有了思路,还是要花很多时间才能把程序调试好,然后有些细节也总是漏掉,考虑的不全面。但等到最终能够完成整个程序,自己还是会开心很长一段时间。今天终于学完查天气了,可以进入面向对象的学习了。非常感谢crossion老师提供的学习资源和平台,我会坚持学习下去的。
作者: crossin先生    时间: 2016-4-28 10:39
LC0919 发表于 2016-4-27 16:09
从2月中旬到现在,一直断断续续在学习。每次遇到稍微大一点的习题,比如上次的文件保存游戏分数,和这次的 ...

加油,要有信心。其实只是不熟悉,开始都是这样的,多踩踩坑,多写点代码,慢慢就好了。欲速则不达
作者: 哇哈哈哈哈    时间: 2016-5-30 21:42
周末晒被子 发表于 2015-12-10 21:40
请教一下佩佩学姐,因为你跟我的学习时间比较近....
第46课的链接都失效了,推荐文章的链接也失效了,你 ...

网页显示是好像失效了,但是点击显示源码,城市代码还是在的,见图片

搜狗截图20160530213915.png (6.3 KB, 下载次数: 219)

搜狗截图20160530213915.png


作者: crossin先生    时间: 2016-5-31 13:26
哇哈哈哈哈 发表于 2016-5-30 21:42
网页显示是好像失效了,但是点击显示源码,城市代码还是在的,见图片

可能只是对方服务器拒绝了你直接发送的请求。修改一下headers信息看看。另外有新接口,可以看查天气(1)开头的链接
作者: 哇哈哈哈哈    时间: 2016-6-1 21:17
对于程序出现的一个问题的解释

程序报错如下:
Traceback (most recent call last):
  File "D:\Python27\citycode.py", line 34, in <module>
    code=content4.split('|')[1]
IndexError: list index out of range

把先生原本的程序加了异常处理,如下
        for d in districts:
            try:
                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
            except:
                print 'error'
                print url3
                print url4

程序运行结束,报了两个错,如下,就是说有两个编号是没得到的
error
http://m.weather.com.cn/data3/city0603.xml
http://m.weather.com.cn/data3/city06039.xml
error
http://m.weather.com.cn/data3/city0902.xml
http://m.weather.com.cn/data3/city09029.xml

打开链接http://m.weather.com.cn/data3/city0603.xml(点击右键显示源码),发现060308|图们,06039|松江,060310|罗子沟
有没有觉得松江的编号有点奇怪,应该是060309才对?
然后http://m.weather.com.cn/data3/city06039.xml这个链接就是打不开的,而http://m.weather.com.cn/data3/city060309.xml是有源码的,经比对与Crossincode先生给出的城市代码一致。
另外一个error和这个是一样的道理。

我想到的解决办法有两个,一个是,error数量少的话,手动给加进去,第二个,换个网站去爬城市代码。

体会:加异常处理真的很有用....



作者: crossin先生    时间: 2016-6-1 23:01
哇哈哈哈哈 发表于 2016-6-1 21:17
对于程序出现的一个问题的解释

程序报错如下:

这个错误分析过程很赞
作者: yan    时间: 2016-8-9 12:13
code = content4.split('|')[1]
IndexError: list index out of range

我原封不动复制代码运行,每次都会报错,请问为什么?
作者: yan    时间: 2016-8-9 12:19
本帖最后由 yan 于 2016-8-9 12:24 编辑

。。

作者: yan    时间: 2016-8-9 12:23
crossin先生 发表于 2013-8-5 16:20
split得出的结果诸如['01', '北京']形式的list,[0]就是取到它的省级别编码

请问这个报错是为什么

QQ截图20160809120208.jpg (50.23 KB, 下载次数: 226)

QQ截图20160809120208.jpg

QQ截图20160809120230.jpg (48.63 KB, 下载次数: 237)

QQ截图20160809120230.jpg


作者: crossin先生    时间: 2016-8-9 17:05
yan 发表于 2016-8-9 12:23
请问这个报错是为什么

你把content4给print出来,看看是什么问题
我记得有些城市可能会请求失败,如果是这个原因,就跳过失败的城市
作者: 编程小菜鸟    时间: 2016-8-16 20:58
crossin先生,查天气的程序我检查了好多遍了,一直都报错。我把您在百度云分享的city.py文件放到编写程序相同的文件夹了,结果还是报错。。。
Traceback (most recent call last):
  File "D:\Program Files\python\weather.py", line 4, in <module>
    from city import city
  File "D:\Program Files\python\city.py", line 2
SyntaxError: Non-ASCII character '\xb1' in file D:\Program Files\python\city.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
请您帮忙看看哪里出错~谢谢您了~
作者: crossin先生    时间: 2016-8-17 11:12
编程小菜鸟 发表于 2016-8-16 20:58
crossin先生,查天气的程序我检查了好多遍了,一直都报错。我把您在百度云分享的city.py文件放到编写程 ...

city.py 开头也要加上指定编码,下载的文件里好像默认没有,如果windows要改成gbk
#coding: gbk
作者: 编程小菜鸟    时间: 2016-8-17 16:52
crossin先生 发表于 2016-8-17 11:12
city.py 开头也要加上指定编码,下载的文件里好像默认没有,如果windows要改成gbk
#coding: gbk ...

谢谢crossin先生,按照您的方法我已经得出结果了,但是结果有点奇怪。
你想查哪个城市的天气?
北京

-2℃ ~ 16℃
我核对了网址都没有问题,在www.weather.com.cn网址上查询了此时北京的温度,也不是这么冷的天气,是网络延迟的原因吗?
作者: crossin先生    时间: 2016-8-18 09:40
编程小菜鸟 发表于 2016-8-17 16:52
谢谢crossin先生,按照您的方法我已经得出结果了,但是结果有点奇怪。
你想查哪个城市的天气 ...

嗯,这个最初的接口,现在好像已经不更新数据了。所以只能练习请求,不能真正用。
你看第一课开始的说明里,有给新的接口
作者: zgd1219    时间: 2016-8-18 11:15
版主,我想用http://wthrcdn.etouch.cn/weather_mini?citykey=101010100这个新接口返回数据做这个练习,出现以下错误,网页内容只取出一个乱码字符帮忙看一下
访问这个url取数据
        url = 'http://wthrcdn.etouch.cn/weather_mini?citykey=101010100'
        content = urllib2.urlopen(url).read()
        print content
        print  type(content)
        data = json.loads(content)
报错如下:
======================== RESTART: C:\Python27\abc.py ========================
你想查哪个城市的天气?
北京
ヒ
<type 'str'>

Traceback (most recent call last):
  File "C:\Python27\abc.py", line 16, in <module>
    data = json.loads(content)
  File "C:\Python27\lib\json\__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python27\lib\json\decoder.py", line 382, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded



作者: crossin先生    时间: 2016-8-19 11:08
zgd1219 发表于 2016-8-18 11:15
版主,我想用http://wthrcdn.etouch.cn/weather_mini?citykey=101010100这个新接口返回数据做这个练习,出 ...

应该是网页被gzip压缩过,看下 查天气1 开头的说明。
或者改用 requests 包来抓取
作者: guixianyang    时间: 2016-8-25 15:21
请问下,url2 = url % p_code 这个语句是啥意思,看不太明白,谢谢
作者: crossin先生    时间: 2016-8-26 16:11
guixianyang 发表于 2016-8-25 15:21
请问下,url2 = url % p_code 这个语句是啥意思,看不太明白,谢谢

这个就是字符串格式化,只不过这里用变量替代了字符串,类似于:
'hello %s' % 'world'
作者: sheep    时间: 2016-9-14 13:45
你好啊,我想问一下,写入文件之前
result+='}'
是什么意思?
作者: crossin先生    时间: 2016-9-14 22:19
sheep 发表于 2016-9-14 13:45
你好啊,我想问一下,写入文件之前
result+='}'
是什么意思?

开头还有个 result = 'city = {\n'

这是为了拼出代码的字符串
作者: Tony    时间: 2016-10-18 18:10
Crossin 先生你好:
我按照上面的操作,写了如下代码:
  1. #coding:utf-8
  2. import urllib2
  3. import json
  4. url = 'http://wthrcdn.etouch.cn/weather_mini?city=北京'
  5. content = urllib2.urlopen(url).read()
复制代码
我直接输出print content结果是一串乱码
然后我看保存到本地文件看看:
  1. f2 = file(r'C:\Users\Tony\Desktop\Demo\1.txt','w+')
  2. f2.writelines(content)
复制代码
结果还是乱码,就算是我保存为html文件也是那样。
我已经将html文件更改为 utf-8模式了,还是不行。
请问这是怎么回事?谢谢!

作者: crossin先生    时间: 2016-10-18 22:06
Tony 发表于 2016-10-18 18:10
Crossin 先生你好:
我按照上面的操作,写了如下代码:我直接输出print content结果是一串乱码
然后我看保 ...

你要看是全部乱码还是只有中文乱码。
全部乱码是因为 gzip 压缩了。解决方法见论坛帖子查天气1开头的说明。
或者改用 requests 模块来抓取
作者: Tony    时间: 2016-10-18 23:16
crossin先生 发表于 2016-10-18 22:06
你要看是全部乱码还是只有中文乱码。
全部乱码是因为 gzip 压缩了。解决方法见论坛帖子查天气1开头的说明 ...

是全部乱码,已经按照先生给的方法解决了,非常感谢!
作者: moredear    时间: 2016-10-29 07:16
Crossing 先生

python版本3.5,mac系统

#coding:utf-8
'''
Created on 2016年10月24日

@author: apple
'''
#!/usr/bin/env python
import urllib.request
url1 = 'http://m.weather.com.cn/data5/city.xml'
content1 = urllib.request.urlopen(url1).read()
print(content1)
provinces = content1.split(',')
print(provinces)

报错

Traceback (most recent call last):
  File "/Users/apple/Documents/workspace/testagain/src/weather.py", line 12, in <module>
b'01|\xe5\x8c\x97\xe4\xba\xac,02|\xe4\xb8\x8a\xe6\xb5\xb7,03|\xe5\xa4\xa9\xe6\xb4\xa5,04|\xe9\x87\x8d\xe5\xba\x86,05|\xe9\xbb\x91\xe9\xbe\x99\xe6\xb1\x9f,06|\xe5\x90\x89\xe6\x9e\x97,07|\xe8\xbe\xbd\xe5\xae\x81,08|\xe5\x86\x85\xe8\x92\x99\xe5\x8f\xa4,09|\xe6\xb2\xb3\xe5\x8c\x97,10|\xe5\xb1\xb1\xe8\xa5\xbf,11|\xe9\x99\x95\xe8\xa5\xbf,12|\xe5\xb1\xb1\xe4\xb8\x9c,13|\xe6\x96\xb0\xe7\x96\x86,14|\xe8\xa5\xbf\xe8\x97\x8f,15|\xe9\x9d\x92\xe6\xb5\xb7,16|\xe7\x94\x98\xe8\x82\x83,17|\xe5\xae\x81\xe5\xa4\x8f,18|\xe6\xb2\xb3\xe5\x8d\x97,19|\xe6\xb1\x9f\xe8\x8b\x8f,20|\xe6\xb9\x96\xe5\x8c\x97,21|\xe6\xb5\x99\xe6\xb1\x9f,22|\xe5\xae\x89\xe5\xbe\xbd,23|\xe7\xa6\x8f\xe5\xbb\xba,24|\xe6\xb1\x9f\xe8\xa5\xbf,25|\xe6\xb9\x96\xe5\x8d\x97,26|\xe8\xb4\xb5\xe5\xb7\x9e,27|\xe5\x9b\x9b\xe5\xb7\x9d,28|\xe5\xb9\xbf\xe4\xb8\x9c,29|\xe4\xba\x91\xe5\x8d\x97,30|\xe5\xb9\xbf\xe8\xa5\xbf,31|\xe6\xb5\xb7\xe5\x8d\x97,32|\xe9\xa6\x99\xe6\xb8\xaf,33|\xe6\xbe\xb3\xe9\x97\xa8,34|\xe5\x8f\xb0\xe6\xb9\xbe'
    provinces = content1.split(',')
TypeError: a bytes-like object is required, not 'str'

完全零基础,问题比较傻,烦请先生讲解一下,感谢
作者: crossin先生    时间: 2016-10-29 17:07
moredear 发表于 2016-10-29 07:16
Crossing 先生

python版本3.5,mac系统

python3这里读到了一个bytes类型,你要先转成str
content1 = content1.decode('utf8')
然后再来做 split

不过我这里查询这个接口发现已经是失败了,你那里居然还可以请求到数据……
作者: moredear    时间: 2016-10-29 23:38
crossin先生 发表于 2016-10-29 17:07
python3这里读到了一个bytes类型,你要先转成str
content1 = content1.decode('utf8')
然后再来做 split

解决了,多谢先生!

请求到数据大概就是传说中新手的好运气吧
作者: yyn    时间: 2016-11-18 10:09
老师,我仿照下面的代码输入之后,并没有输出东西,连乱码都没有

#coding : cp936
import urllib2
import json
url = 'http://wthrcdn.etouch.cn/weather_mini?city=北京'
content = urllib2.urlopen(url).read()
print content

求指导。。
爬虫刚入门,就爬不下去了
作者: crossin先生    时间: 2016-11-18 14:32
yyn 发表于 2016-11-18 10:09
老师,我仿照下面的代码输入之后,并没有输出东西,连乱码都没有

#coding : cp936

不应该什么都没有啊,至少也有报错
你发截图来看看。

另外你可以改用 requests 包,会比较好用。编辑器也可以换成pycharm,然后它的编码设置成 utf8
作者: study@python    时间: 2016-12-19 12:55
crossin先生,代码第25行,是不是应改为“line = "    '%s': '101%s',\n" % (name, code)”

作者: crossin先生    时间: 2016-12-19 13:09
study@python 发表于 2016-12-19 12:55
crossin先生,代码第25行,是不是应改为“line = "    '%s': '101%s',\n" % (name, code)”
...

你拿到最后一层,应该是类似这样的结果:
020101|101020100
后面那部分就是完整代码,所以不需要再加101




欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5