设为首页收藏本站

Crossin的编程教室

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

【Python 第45课】 查天气(3)

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

31#
发表于 2013-10-9 00:34:39 |只看该作者
阿努比斯 发表于 2013-10-8 23:36
先生您好,我是仿照您的编码来实现了这个查天气功能,但是发现总是"查询失败",不知道是什么原因。输出result ...

把输出和错误提示一并发上来看看
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

32#
发表于 2013-10-17 01:09:04 |只看该作者
可以,就是手太新了,看不懂,但是有兴趣,明天来搞懂这个查天气。顶,
回复

使用道具 举报

0

主题

0

好友

558

积分

高级会员

Rank: 4

33#
发表于 2014-9-25 15:09:06 |只看该作者
import urllib2
import json

web = urllib2.urlopen('http://www.baidu.com')
content = web.read()
html = file('baidu.html','w')
html.write(content)
html.close()
print type(content)

data = json.loads(content)
print type(data)

先生,这些代码倒数第二句总是报错,说是解析不了。ValueError: No JSON object could be decoded.
不知道改什么东西?
学习,纯粹。
回复

使用道具 举报

0

主题

0

好友

558

积分

高级会员

Rank: 4

34#
发表于 2014-9-25 15:25:52 |只看该作者
本帖最后由 liu-pengfei 于 2014-9-25 16:04 编辑

先生,还有问题,我复制了你的代码,执行的时候无论输入哪个城市,总是输出没有找到该城市。我调试,发现if后面的语句不会执行,不知道为什么?

我有查到,原来是编码的问题。都是# -*- coding: cp936 -*-在捣乱,原来没有看清先生的讲解啊。
学习,纯粹。
回复

使用道具 举报

0

主题

0

好友

48

积分

新手上路

Rank: 1

35#
发表于 2015-5-15 11:32:40 |只看该作者
str_temp = ('%s\n%s ~ %s') % (
            result['weather'],
            result['temp1'],
            result['temp2']
        )
为什么我在('%s\n%s ~ %s')里面一加中文就会报错?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

36#
发表于 2015-5-17 00:45:29 |只看该作者
csyhhb 发表于 2015-5-15 11:32
str_temp = ('%s\n%s ~ %s') % (
            result['weather'],
            result['temp1'],

如果是中文,会触发一次unicode到str的转换,但默认的编码不支持中文
你如改成 u('%s\n%s ~ %s') % (...) 大概就可以了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

48

积分

新手上路

Rank: 1

37#
发表于 2015-5-17 14:03:28 |只看该作者
crossin先生 发表于 2015-5-17 00:45
如果是中文,会触发一次unicode到str的转换,但默认的编码不支持中文
你如改成 u('%s\n%s ~ %s') % (...) ...

确实是里面的编码不一致就不会输出了 我把 result['weather']改成 result['weather'].encode('utf-8')也可以
回复

使用道具 举报

0

主题

1

好友

34

积分

新手上路

Rank: 1

38#
发表于 2015-11-12 12:19:06 |只看该作者
本帖最后由 我是佩佩学姐 于 2015-11-12 13:54 编辑

Crossin先生,我是问题少年~又来求问,我把评论里的问题都找过了没法解决才提问的,出现以下问题:
1、if....else这块出问题,会提示:EOL While scanning string literal,必须把else语句去掉程序才可以正常执行
2、去掉else 之后,程序执行结果一直显示‘查询失败’,print result 结果正常。求老师指点
Idle 结果:
你想查询哪个城市的天气?
福州
101230101
http://www.weather.com.cn/data/cityinfo/101230101.html
{"weatherinfo":{"city":"福州","cityid":"101230101","temp1":"30℃","temp2":"18℃","weather":"多云","img1":"d1.gif","img2":"n1.gif","ptime":"08:00"}}
<type 'str'>
<type 'dict'>
{u'city': u'\u798f\u5dde', u'ptime': u'08:00', u'cityid': u'101230101', u'temp2': u'18\u2103', u'temp1': u'30\u2103', u'weather': u'\u591a\u4e91', u'img2': u'n1.gif', u'img1': u'd1.gif'}
  1. # -*- coding: cp936 -*-
  2. import urllib2
  3. import json
  4. from city import city


  5. cityname = raw_input('你想查询哪个城市的天气?\n')
  6. citycode = city.get(cityname)
  7. print citycode
  8. if citycode:
  9.     try:
  10.         url = ('http://www.weather.com.cn/data/cityinfo/%s.html'%citycode)
  11.         print url
  12.         content=urllib2.urlopen(url).read()
  13.         print content

  14.         data = json.loads(content)

  15.         print type(content)
  16.         print type(data)
  17.         result = data['weatherinfo']
  18.         print result                      #测试result
  19.         str_temp = u'%s\n%s~%s'%(result['weather'],result['temp1'],result['temp2'])
  20.         print str_temp
  21.     except:
  22.         print '查询失败'
  23. else:
  24.     print '没有找到该城市’
复制代码
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

39#
发表于 2015-11-12 13:03:16 |只看该作者
我是佩佩学姐 发表于 2015-11-12 12:19
Crossin先生,我是问题少年~又来求问,我把评论里的问题都找过了没法解决才提问的,出现以下问题:
1、if... ...

前一个问题是你最后一个引号不对吧,是中文引号
后面一个是,unicode直接%s转的话,会默认用ascii,所以中文会有问题。你试试看用 + 来拼字符串而不用 %s。或者改成result['weather'].encode('utf8')
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

1

好友

34

积分

新手上路

Rank: 1

40#
发表于 2015-11-12 13:57:35 |只看该作者
crossin先生 发表于 2015-11-12 13:03
前一个问题是你最后一个引号不对吧,是中文引号
后面一个是,unicode直接%s转的话,会默认用ascii,所以 ...

谢谢先生~查天气(1)-(3)的问题都解决了哈。
回复

使用道具 举报

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

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

GMT+8, 2024-11-25 12:06 , Processed in 0.023282 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部