设为首页收藏本站

Crossin的编程教室

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

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

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

71#
发表于 2016-5-1 22:07:38 |只看该作者
chuifeng 发表于 2016-5-1 13:52
好奇怪,查询杭州、天津可以,北京、上海却查询失败,用的是先生的city.py

把中间的结果都打印出来,确定问题所在,是直辖市的页面地址不对,还是请求出来的结果不对。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

40

积分

新手上路

Rank: 1

72#
发表于 2016-6-28 17:01:32 |只看该作者
为啥查询的天气结果,和直接在中国天气网上查询的,相差很远呢?重庆
阴转阵雨
21℃ ~ 17℃
实际结果:22 ~ 28°C。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

73#
发表于 2016-6-29 14:28:28 |只看该作者
Joshtu 发表于 2016-6-28 17:01
为啥查询的天气结果,和直接在中国天气网上查询的,相差很远呢?重庆
阴转阵雨
21℃ ~ 17℃

我也发现了,这个接口好像数据是假的。参考下第一课里面给的新接口
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

40

积分

新手上路

Rank: 1

74#
发表于 2016-6-29 17:31:47 |只看该作者
crossin先生 发表于 2016-6-29 14:28
我也发现了,这个接口好像数据是假的。参考下第一课里面给的新接口

好的!谢谢您
回复

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

75#
发表于 2016-9-20 21:55:33 |只看该作者
因为用的是notepad++的编辑器,尝试着如crossin先生说的一样编码直接设置成gbk,但是没有成功。运行总是显示查询失败,后来尝试打印出每个步骤的结果,然后查资料找了json的loads使用注意事项找出了原因,就是如果传入json的字符串不是utf-8编码的话,就无法调用json的loads方法,因为前面content只有转换成gbk才能显示,所以这一步要指定字符编码。编码如下:
  1. # -*- coding:utf-8 -*-
  2. import urllib2
  3. import json
  4. from city import city

  5. cityname = raw_input('你想查哪里城市的天气?\n'.decode('utf-8').encode('gbk'))
  6. citycode = city.get(cityname.decode('gbk').encode('utf-8'))
  7. if citycode:
  8.         try:
  9.                 url = ('http://www.weather.com.cn/data/cityinfo/%s.html' % citycode)
  10.                 content = urllib2.urlopen(url).read().decode('utf-8').encode('gbk')
  11.                 data = json.loads(content,encoding = 'gbk')
  12.                 result = data['weatherinfo']
  13.                 str_temp = ('%s\n%s ~ %s') % (result['weather'], result['temp1'], result['temp1'])
  14.                 print str_temp
  15.         except:
  16.                 print u'查询失败'
  17. else:
  18.         print u'没有找到该城市'
复制代码
回复

使用道具 举报

0

主题

0

好友

44

积分

新手上路

Rank: 1

76#
发表于 2016-10-7 19:24:05 |只看该作者
# -*- coding:cp936 -*-
import urllib.request
import json
from city import city

cityname = input('你想查询哪个城市?\n')
citycode = city.get(cityname)
if citycode:
    try:
        url = ('http://wthrcdn.etouch.cn/weather_mini?citykey=%s'%citycode)
        content = urllib.request.urlopen(url).read()
        data = json.loads(content.decode('utf-8'))
        result = data['weatherinfo']
        str_temp = ('%s\n%s~%s')%(
                result['weather'],
                result['temp1'],
                result['temp2']
                )
        print(str_temp)
    except:
        print('查询失败')
else:
    print('你所查询的城市不存在!')
老师,更换网址后显示查询失败,是什么回事呢?网址不对?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

77#
发表于 2016-10-8 09:50:33 |只看该作者
swinh 发表于 2016-10-7 19:24
# -*- coding:cp936 -*-
import urllib.request
import json

你把请求的网址print出来,放浏览器里看对不对
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

64

积分

注册会员

Rank: 2

78#
发表于 2017-7-19 16:44:23 |只看该作者
result = data['weatherinfo']
这一句的作用是什么
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

79#
发表于 2017-7-19 22:43:08 |只看该作者
James_Danni 发表于 2017-7-19 16:44
result = data['weatherinfo']
这一句的作用是什么

你看下data的内容就知道了。这是字典的基本操作,取 weatherinfo 这个键对应的值
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

18

积分

新手上路

Rank: 1

80#
发表于 2017-8-4 22:09:28 |只看该作者
啊,来的有点晚啊,都这么久的帖子了
回复

使用道具 举报

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

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

GMT+8, 2024-11-25 11:19 , Processed in 0.017701 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部