Crossin的编程教室

标题: 【天气查询】Python3.5实施代码及注意事项 [打印本页]

作者: YJ_lee    时间: 2017-12-21 20:26
标题: 【天气查询】Python3.5实施代码及注意事项
看到基础课件“天气查询”章节,我个人用的版本是3.5。个人小白一枚(真的很白),抛砖引玉。先上代码部分:

# -*- coding: utf-8 -*-

import urllib.request
import json
from city import city

cityname=input('你想查哪个城市的天气?')
citycode=city.get(cityname)
#print(citycode)
if citycode:
    try:
        url=('http://www.weather.com.cn/data/cityinfo/%s.html'%citycode)
        content=urllib.request.urlopen(url).read()
        #print(content)
        content1=content.decode('utf-8')
        #print(content1)
        data=json.loads(content1)
        print(data)
        result=data['weatherinfo']
        str_temp=('%s\n%s - %s')%(result['weather'],result['temp1'],result['temp2'])
        print(str_temp)
    except:
        print('查询失败')
else:
    print('没有找到该城市')

这里面有几个需要注意的地方:

1、city.py 需要进行转码。老师的文件我也没看懂是什么编码的,反正开始的时候程序老是报“utf-8”不能解码。我用的是notepad++转换为utf-8.
2、Python3.0以后的urllib2模块已经合并,开始我也不知道该用什么。问度娘,还真有。找到urllib.request,看了几个网上的例子大体知道该怎么写了。
3、继续出错,来到“content=urllib.request.urlopen(url).read()”。每次程序运行都会告诉你,json.loads(content1)的参数不能是byte类型。窝草,什么鬼?赶紧打印输出一下

你想查哪个城市的天气?北京
101010100
b'{"weatherinfo":{"city":"\xe5\x8c\x97\xe4\xba\xac","cityid":"101010100","temp1":"-2\xe2\x84\x83","temp2":"16\xe2\x84\x83","weather":"\xe6\x99\xb4","img1":"n0.gif","img2":"d0.gif","ptime":"18:00"}}'


中间那些XXOO什么鬼?怎么跟老师贴图不一样?既然不能是byte类型,强制转换一下。str()套上去,结果还是。。。
是不是那些XXOO和老师贴图那样变成汉字就行了?我知道"\xe5\x8c\x97\xe4\xba\xac"肯定就是“北京”。但是需要转码,继续度娘,于是就有了content.decode('utf-8')。

跳过以上三个坑,恭喜终于在Python3.5上实现代码!

作者: TED    时间: 2017-12-21 22:12
很棒诶 基本由python2转到python3的问题都被你自行解决了 赞




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