设为首页收藏本站

Crossin的编程教室

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

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

  [复制链接]

1

主题

0

好友

35

积分

新手上路

Rank: 1

211#
发表于 2017-12-19 09:57:06 |只看该作者
TED 发表于 2017-12-18 16:12
content = web.read().decode('utf-8') 试下,把bytes转化为unicode

还是不行
  1. RESTART: C:/Users/lenovo/AppData/Local/Programs/Python/Python37-32/asfdgggfdsfgghsf.py
  2. Traceback (most recent call last):
  3.   File "C:/Users/lenovo/AppData/Local/Programs/Python/Python37-32/asfdgggfdsfgghsf.py", line 12, in <module>
  4.     out.write(data)
  5. UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 27363: illegal multibyte sequence
  6. >>>




  7. [code]import urllib.request


  8. url=('http://www.baidu.com')

  9. web=urllib.request.urlopen(url)
  10. content=web.read().decode('utf-8')


  11. data=content
  12. out=open('C:/Users\lenovo\Desktop\youyouyou\shiyan.html','w')
  13. out.write(data)
  14. out.close()
复制代码
[/code]
回复

使用道具 举报

6

主题

2

好友

654

积分

实习版主

Rank: 7Rank: 7Rank: 7

212#
发表于 2017-12-19 13:20:38 |只看该作者
敦敦敦 发表于 2017-12-19 09:57
还是不行[/code]

要写入的html文件的话,就不用解码
content=web.read()
然后用‘wb’的模式把bytes写入文件:
out=open('shiyan.html','wb')
然后写入;
如果是要把网页print出来,那就要
content=web.read().decode('utf-8')
print (content)
回复

使用道具 举报

1

主题

0

好友

35

积分

新手上路

Rank: 1

213#
发表于 2017-12-19 15:04:24 |只看该作者
TED 发表于 2017-12-19 13:20
要写入的html文件的话,就不用解码
content=web.read()
然后用‘wb’的模式把bytes写入文件:

写入wb格式成了
回复

使用道具 举报

1

主题

0

好友

43

积分

新手上路

Rank: 1

214#
发表于 2018-1-27 19:15:19 |只看该作者
我就想知道city.py文件在哪
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

215#
发表于 2018-1-28 23:13:09 |只看该作者
moxie0610 发表于 2018-1-27 19:15
我就想知道city.py文件在哪

查天气(1)帖子里有
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

216#
发表于 2018-2-5 14:42:01 |只看该作者
本帖最后由 流云溯雪 于 2018-2-5 14:43 编辑

SyntaxError:'gbk' codec can't decode byte 0xbd in position 1041:illegal multibyte sequence.
两个文件都加了cp936,为何还会报这样的错?还有就是city.py所有的中文字符都是菱形。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

217#
发表于 2018-2-6 10:34:30 |只看该作者
流云溯雪 发表于 2018-2-5 14:42
SyntaxError:'gbk' codec can't decode byte 0xbd in position 1041:illegal multibyte sequence.
两个文件 ...

重新在代码编辑器里建一下city.py
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

18

积分

新手上路

Rank: 1

218#
发表于 2018-2-12 22:19:17 |只看该作者
crossin先生 发表于 2016-4-29 11:02
发现 wthrcdn.etouch.cn 这个站的返回接口用了 gzip 压缩数据。所以你那个不是编码问题,而是数据被压缩 ...

老师,我用的Python3,自己改了一下代码,现在又出现这个新问题了,请问怎么解决啊
  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. #print(content)
  11. buf=io.StringIO(content)
  12. f=gzip.GzipFile(fileobj=buf)
  13. data=f.read()
  14. print(data)

  15. Traceback (most recent call last):
  16.   File "C:/Python3/weather.py", line 12, in <module>
  17.     buf=io.StringIO(content)
  18. TypeError: initial_value must be str or None, not bytes

复制代码
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

219#
发表于 2018-2-12 22:30:29 |只看该作者
ayechge 发表于 2018-2-12 22:19
老师,我用的Python3,自己改了一下代码,现在又出现这个新问题了,请问怎么解决啊 ...

拿到content后转化一下,content = content.decode('utf8')
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

18

积分

新手上路

Rank: 1

220#
发表于 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)
复制代码
回复

使用道具 举报

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

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

GMT+8, 2024-5-1 16:38 , Processed in 0.031901 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部