设为首页收藏本站

Crossin的编程教室

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

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

[复制链接]

1

主题

0

好友

35

积分

新手上路

Rank: 1

91#
发表于 2017-9-22 09:15:03 |只看该作者
crossin先生 发表于 2017-9-21 13:50
应该不是编码问题
把 try...except 去掉,或者在except里输出报错信息,看看报什么错。不然报错都被你的 ...

Traceback (most recent call last):
  File "C:\Python27\Crossin\44weather.py", line 18, in <module>
    result['tmep2']
KeyError: 'tmep2'

应该用get嘛?
回复

使用道具 举报

0

主题

0

好友

154

积分

注册会员

Rank: 2

92#
发表于 2017-9-22 09:34:11 |只看该作者
这个报错告诉你没有这个键。。可以尝试用get来回避报错,但还是要弄清楚键名是什么才能取到想要的内容
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

93#
发表于 2017-9-22 22:48:31 |只看该作者
chchch0720 发表于 2017-9-22 09:15
Traceback (most recent call last):
  File "C:\Python27\Crossin\44weather.py", line 18, in
    res ...

那个键好像是 temp2
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

25

积分

新手上路

Rank: 1

94#
发表于 2017-11-2 12:29:49 |只看该作者
本帖最后由 asphodelus 于 2017-11-2 12:34 编辑

py3似乎不少用法都和py2不一样了,raw_input,urllib等等
为了测试方便,去掉了try except添加打印content
改成content = urllib.request.urlopen(url).read().decode()
json解码问题似乎就解决了,不确定这么做是否一直有效,烦请先生来指点一下~附上截图






1.png (11.67 KB, 下载次数: 200)

1.png

2.png (14.49 KB, 下载次数: 204)

2.png

3.png (10 KB, 下载次数: 205)

3.png

回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

95#
发表于 2017-11-2 13:04:19 |只看该作者
asphodelus 发表于 2017-11-2 12:29
py3似乎不少用法都和py2不一样了,raw_input,urllib等等
为了测试方便,去掉了try except添加打印content
...

你做的是对的

你也可以用 requests 库,可以省很多事
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

60

积分

注册会员

Rank: 2

96#
发表于 2017-11-6 17:48:04 |只看该作者
整合了这两课的内容,小小修改了一下
  1. import urllib.request
  2. import json
  3. from city import city

  4. exit=False

  5. while not exit:
  6.     cityname=input("你想查询哪个城市的天气?输入 q 退出查询\n")
  7.     citycode = city.get(cityname)
  8.     if cityname=="q" or cityname=="Q":
  9.         print("退出!")
  10.         exit=True
  11.     else:

  12.         if citycode:
  13.             try:
  14.                 url = ("http://www.weather.com.cn/data/cityinfo/%s.html" % citycode)
  15.                 request = urllib.request.Request(url)
  16.                 response = urllib.request.urlopen(request)
  17.                 content = response.read().decode("utf-8")
  18.                 print('未转化输出:%s'%content)
  19.                 print('url%s'%url)
  20.                 data = json.loads(content)   # 输出转化为字典dict
  21.                 print('转化后输出:%s'%data)
  22.                 print(type(content))
  23.                 print(type(data))
  24.                 result = data['weatherinfo']
  25.                 str_temp = ('%s\n%s ~ %s')%(
  26.                     result['weather'],
  27.                     result['temp1'],
  28.                     result['temp2']
  29.                 )
  30.                 print(str_temp)

  31.             except:
  32.                 print('查询失败')
  33.         else:
  34.             print('没有找到该城市')
复制代码
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

97#
发表于 2017-11-23 08:26:26 |只看该作者
# -*- coding: utf-8 -*-
from urllib.request import urlopen  #打开网页函数
import urllib
import json
from city import city  #把city文件作为函数引用

f=open('c:\Python34\city.py')
cityname=input('你想查哪个城市的天气?\n')
citycode=city.get(cityname)
if citycode:
    url=("http://www.weather.com.cn/weather1d/%s.shtml#search" %citycode)
    content=urlopen(url).read().decode()  #解码网址
    data=json.loads(content,'utf-8')      #把字符串转成字典
    result=data["weatherinfo"]
    str_temp=("%s\n%s~%s")%(result["weather"],result["temp1"],result["temp2"])
    print(str_temp)
f.close()
不管有没有decode都是在json.loads那里出错,请大神指教
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

98#
发表于 2017-11-23 22:31:03 |只看该作者
bobo0769 发表于 2017-11-23 08:26
# -*- coding: utf-8 -*-
from urllib.request import urlopen  #打开网页函数
import urllib

那说明你拿到的content不对,你要看看content是什么
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

30

积分

新手上路

Rank: 1

99#
发表于 2018-1-2 23:38:14 |只看该作者
各位大佬求帮助,我现在用的新的地址反馈的天气信息但是是乱码,请问这种情况应该怎么处理哪

微信图片_20180102233445.png (42.78 KB, 下载次数: 203)

微信图片_20180102233445.png

1514907325(1).jpg (23.32 KB, 下载次数: 204)

1514907325(1).jpg

回复

使用道具 举报

0

主题

0

好友

30

积分

新手上路

Rank: 1

100#
发表于 2018-1-2 23:55:23 |只看该作者
wlfrank 发表于 2018-1-2 23:38
各位大佬求帮助,我现在用的新的地址反馈的天气信息但是是乱码,请问这种情况应该怎么处理哪 ...

已核实为网页编码压缩输出问题,已解决http://www.voidcn.com/article/p-qpuzajek-hr.html
回复

使用道具 举报

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

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

GMT+8, 2024-4-26 22:46 , Processed in 0.031909 second(s), 25 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部