设为首页收藏本站

Crossin的编程教室

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

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

  [复制链接]

0

主题

0

好友

18

积分

新手上路

Rank: 1

221#
发表于 2018-2-13 21:43:58 |只看该作者
crossin先生 发表于 2018-2-12 22:30
拿到content后转化一下,content = content.decode('utf8')

老师,我按照您说的改了之后,print(content)时,又报错Traceback (most recent call last):
  File "C:\Python3\weather.py", line 12, in <module>
    content=content.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

我上网查说是去掉'Accept-Encoding':' gzip, deflate',但是程序里本来就没这句话啊。
附上代码
  1. import urllib.request
  2. import json
  3. import urllib
  4. import io
  5. import gzip
  6. print('你想查哪个城市的天气')
  7. place=urllib.parse.quote(input())
  8. url='http://wthrcdn.etouch.cn/weather_mini?city=%s'%place
  9. content=urllib.request.urlopen(url).read()
  10. content=content.decode('utf-8')
  11. print (content)
复制代码
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

222#
发表于 2018-2-15 11:37:55 |只看该作者
ayechge 发表于 2018-2-13 21:43
老师,我按照您说的改了之后,print(content)时,又报错Traceback (most recent call last):
  File "C:\ ...

你看下查天气1里的帖子,关于 gzip 的那段
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

223#
发表于 2018-2-25 14:04:37 |只看该作者
crossin先生 发表于 2016-7-30 23:00
这里有两个注意的地方,一个是这个接口接受中文,但尝试下来编码必须是utf8。
另一个,它的返回值会进行gz ...

我使用http://wthrcdn.etouch.cn/weather_mini?city=北京 这个接口,最后打印出来是{"status":1002,"desc":"invilad-citykey"}
是不是一定要使用城市ID
代码如下:
#coding: cp936
import urllib2
from StringIO import StringIO
import gzip
cityname = raw_input('你想查哪个城市的天气?\n')
url = ('http://wthrcdn.etouch.cn/weather_mini?city=%s.html'%cityname)
print url
web = urllib2.urlopen(url).read()
print web
buf = StringIO(web)
print buf
f = gzip.GzipFile(fileobj=buf)
print f
data = f.read()
print data

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

224#
发表于 2018-2-25 15:43:25 |只看该作者
kratos 发表于 2018-2-25 14:04
我使用http://wthrcdn.etouch.cn/weather_mini?city=北京 这个接口,最后打印出来是{"status":1002,"desc ...

用这个接口,北京要用 urlquote 转一下
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

225#
发表于 2018-2-25 16:35:16 |只看该作者
本帖最后由 kratos 于 2018-2-25 16:59 编辑
crossin先生 发表于 2018-2-25 15:43
用这个接口,北京要用 urlquote 转一下

crossin先生
我已经转换了,但是结果还是{"status":1002,"desc":"invilad-citykey"}



天气.png (51.5 KB, 下载次数: 217)

天气.png

回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

226#
发表于 2018-2-26 11:08:13 |只看该作者
本帖最后由 kratos 于 2018-2-26 11:09 编辑
kratos 发表于 2018-2-25 16:35
crossin先生
我已经转换了,但是结果还是{"status":1002,"desc":"invilad-citykey"}

问题找到了,是coding这里,应该用utf-8不然中文解码会有不同~哎哟我去
回复

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

227#
发表于 2018-3-11 11:25:19 |只看该作者
老师,我用的是py3.6
我的代码:
# -*- coding: utf-8 -*-
from city import city
import urllib.request
import json
cityname = input('你想查哪个城市的天气?\n')
citycode = city.get(cityname)
if citycode:
   url = ('http://www.weather.com.cn/data/cityinfo/%s.html' % citycode)
   content = urllib.request.urlopen(url).read()
   print(content)

结果报错:
  File "C:\Users\shenwang886\Desktop\python\从网络中获取数据.py", line 10, in <module>
    from city import city
  File "C:\Users\shenwang886\Desktop\python\city.py", line 2
SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte

请问应该怎么改呢?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

228#
发表于 2018-3-11 15:41:10 |只看该作者
shenwang886 发表于 2018-3-11 11:25
老师,我用的是py3.6
我的代码:
# -*- coding: utf-8 -*-

两个文件开头都改成 gbk
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

229#
发表于 2018-3-11 15:51:59 |只看该作者
crossin先生 发表于 2018-3-11 15:41
两个文件开头都改成 gbk

问题已经解决了!
非常感谢指导
回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

230#
发表于 2018-3-11 16:11:16 |只看该作者
本帖最后由 qianzehao 于 2018-3-11 16:40 编辑

参照上面的回帖,问题已解决,谢谢老师。

回复

使用道具 举报

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

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

GMT+8, 2024-5-1 07:15 , Processed in 0.032230 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部