设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: crossin先生
打印 上一主题 下一主题

【Python 第44课】 查天气(2)

  [复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

121#
发表于 2016-4-10 16:20:23 |只看该作者
i7i1234567 发表于 2016-4-10 00:03
Crossin老师,感谢您的课程
查天气第二节里面,中文字符总是有问题。windows 7环境
1、代码中提示的汉字在c ...

BJ是啥?查天气这几课的回帖里有说到类似的情况。一般是没有把编码设成cp936。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

122#
发表于 2016-4-15 18:28:56 |只看该作者
crossin先生 发表于 2016-4-10 16:20
BJ是啥?查天气这几课的回帖里有说到类似的情况。一般是没有把编码设成cp936。 ...

中文城市查询出不来,我修改了一个北京为BJ,查询BJ可以出来
回复

使用道具 举报

1

主题

0

好友

47

积分

新手上路

Rank: 1

123#
发表于 2016-4-15 22:32:26 |只看该作者
crossin先生 发表于 2013-7-24 10:27
很好啊
python 3 的同学看过来!

大哥 你不知道我这两天吃了多少苦  在没来这个看。
我从python3 运行不行  下了一个python2.7  运行还是不是   没有把#coding:utf-8改为#改为#coding:cp936
最后我到pycharm里面该文件编码 才对了。
哪知道今天在这里一看 我之前受的苦全白费了 ,方法都在这里。我要继续用python3 ,谢谢那位大哥把python3 urllib的用法贴出来。 寂寞自学的孩子相当不容易。
回复

使用道具 举报

1

主题

0

好友

47

积分

新手上路

Rank: 1

124#
发表于 2016-4-15 22:33:25 |只看该作者
小坏 发表于 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把cit ...

谢谢。
回复

使用道具 举报

0

主题

0

好友

54

积分

注册会员

Rank: 2

125#
发表于 2016-4-19 15:41:17 |只看该作者
小坏 发表于 2013-8-8 17:34
编码问题解决分享:
我用win7的,照编码写的出了问题,返回的citycode都是None。后在群里童鞋指导下,把cit ...

我也遇到了同样的问题。把字典直接放在程序中运行正常;加了utf-8以后,作为模块导入后citycode就一直输出None。所以就来论坛看下。还好看到了你的解决办法。
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

126#
发表于 2016-4-29 09:36:31 |只看该作者
本帖最后由 issaclee 于 2016-4-29 10:51 编辑

老师及各位同学好:
我卡在这一课一天多了,win7环境,python2.7,两边都已设为cp936编码格式,但是content始终打印乱码,sys的默认编码是ascii,这个应该怎么解决呢?
我看了下,主要是接口返回来的内容肯定不是cp936格式的,具体是什么格式我也不清楚,这里打印不出来
# -*- coding: cp936 -*-
import urllib2
import json

from city import city
cityname = raw_input('你想查哪个城市的天气?\n')
citycode = city.get(cityname)
print citycode
if citycode:
   url = ('http://wthrcdn.etouch.cn/weather_mini?citykey=%s' % citycode)
   print url
   content = urllib2.urlopen(url).read()
   print content
   import sys
   print(sys.getdefaultencoding())



结果:
================================
>>>
你想查哪个城市的天气?
北京
101010100
http://wthrcdn.etouch.cn/weather_mini?citykey=101010100
ヒ
ascii
>>>

















回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

127#
发表于 2016-4-29 11:02:55 |只看该作者
issaclee 发表于 2016-4-29 09:36
老师及各位同学好:
我卡在这一课一天多了,win7环境,python2.7,两边都已设为cp936编码格式,但是content ...

发现 wthrcdn.etouch.cn 这个站的返回接口用了 gzip 压缩数据。所以你那个不是编码问题,而是数据被压缩了。
用此方法解压 gzip 数据:
  1. from StringIO import StringIO
  2. import gzip
  3. buf = StringIO(content)
  4. f = gzip.GzipFile(fileobj=buf)
  5. data = f.read()
复制代码
py3写法:
  1. import gzip
  2. data = gzip.decompress(content)
复制代码
详细的可去网上搜索“python 解压 gzip”
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

128#
发表于 2016-4-29 11:39:50 |只看该作者
crossin先生 发表于 2016-4-29 11:02
发现 wthrcdn.etouch.cn 这个站的返回接口用了 gzip 压缩数据。所以你那个不是编码问题,而是数据被压缩 ...

老师,我访问http://www.weather.com.cn/data/cityinfo/%s.html这个依然不行
idle打印不出JSON数据,换了cmd也打印不出
用浏览器访问也是显示乱码
不清楚这个接口返回的到底是什么格式的数据,ide的编码格式肯定和接口返回数据的格式不匹配

cmd就是cp936的输出格式了,但是仍然无法正确输出数据
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

129#
发表于 2016-4-30 23:10:10 |只看该作者
issaclee 发表于 2016-4-29 11:39
老师,我访问http://www.weather.com.cn/data/cityinfo/%s.html这个依然不行
idle打印不出JSON数据,换了 ...

你上面那个网站,只要做一次gzip解压就可以,我试过。
下面这个,我看了下,他给的返回值默认是utf-8编码,所以你要手动做下解码处理
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

130#
发表于 2016-7-22 10:40:01 |只看该作者
老师老师我沉船了
为了节省咱的空间我就不发图直接发代码和结果
  1. <div># -*- coding:utf-8 -*-</div><div>import urllib2</div><div>import json</div><div>
  2. </div><div>from city import city</div><div>cityname = raw_input("你想查询哪个城市的的天气?\n")</div><div>citycode = city.get(cityname)</div><div>
  3. </div><div>if citycode:</div><div>    url = ('http://www.weather.com.cn/data/cityinfo/%s.html' % citycode)</div><div>    content = urllib2.urlopen(url).read()</div><div>    print content</div>
复制代码
完全一样的代码
  1. <div>Python 2.7.5 (default, May 15 2013, 22:44:16) [MSC v.1500 64 bit (AMD64)] on win32</div><div>Type "copyright", "credits" or "license()" for more information.</div><div>>>> ================================ RESTART ================================</div><div>>>> </div><div>
  2. </div><div>Traceback (most recent call last):</div><div>  File "D:/python/demo", line 5, in <module></div><div>    from city import city</div><div>  File "D:/python\city.py", line 2</div><div>SyntaxError: Non-ASCII character '\xe5' in file D:/python\city.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details</div><div>>>> </div>
复制代码
这个是运行结果~~求老师教教~

回复

使用道具 举报

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

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

GMT+8, 2024-5-7 12:47 , Processed in 0.030377 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部