设为首页收藏本站

Crossin的编程教室

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

【Python 第46课】 查天气(4)

  [复制链接]

7

主题

0

好友

127

积分

注册会员

Rank: 2

91#
发表于 2016-10-18 18:10:20 |只看该作者
Crossin 先生你好:
我按照上面的操作,写了如下代码:
  1. #coding:utf-8
  2. import urllib2
  3. import json
  4. url = 'http://wthrcdn.etouch.cn/weather_mini?city=北京'
  5. content = urllib2.urlopen(url).read()
复制代码
我直接输出print content结果是一串乱码
然后我看保存到本地文件看看:
  1. f2 = file(r'C:\Users\Tony\Desktop\Demo\1.txt','w+')
  2. f2.writelines(content)
复制代码
结果还是乱码,就算是我保存为html文件也是那样。
我已经将html文件更改为 utf-8模式了,还是不行。
请问这是怎么回事?谢谢!
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

92#
发表于 2016-10-18 22:06:45 |只看该作者
Tony 发表于 2016-10-18 18:10
Crossin 先生你好:
我按照上面的操作,写了如下代码:我直接输出print content结果是一串乱码
然后我看保 ...

你要看是全部乱码还是只有中文乱码。
全部乱码是因为 gzip 压缩了。解决方法见论坛帖子查天气1开头的说明。
或者改用 requests 模块来抓取
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

7

主题

0

好友

127

积分

注册会员

Rank: 2

93#
发表于 2016-10-18 23:16:41 |只看该作者
crossin先生 发表于 2016-10-18 22:06
你要看是全部乱码还是只有中文乱码。
全部乱码是因为 gzip 压缩了。解决方法见论坛帖子查天气1开头的说明 ...

是全部乱码,已经按照先生给的方法解决了,非常感谢!
回复

使用道具 举报

0

主题

0

好友

72

积分

注册会员

Rank: 2

94#
发表于 2016-10-29 07:16:54 |只看该作者
Crossing 先生

python版本3.5,mac系统

#coding:utf-8
'''
Created on 2016年10月24日

@author: apple
'''
#!/usr/bin/env python
import urllib.request
url1 = 'http://m.weather.com.cn/data5/city.xml'
content1 = urllib.request.urlopen(url1).read()
print(content1)
provinces = content1.split(',')
print(provinces)

报错

Traceback (most recent call last):
  File "/Users/apple/Documents/workspace/testagain/src/weather.py", line 12, in <module>
b'01|\xe5\x8c\x97\xe4\xba\xac,02|\xe4\xb8\x8a\xe6\xb5\xb7,03|\xe5\xa4\xa9\xe6\xb4\xa5,04|\xe9\x87\x8d\xe5\xba\x86,05|\xe9\xbb\x91\xe9\xbe\x99\xe6\xb1\x9f,06|\xe5\x90\x89\xe6\x9e\x97,07|\xe8\xbe\xbd\xe5\xae\x81,08|\xe5\x86\x85\xe8\x92\x99\xe5\x8f\xa4,09|\xe6\xb2\xb3\xe5\x8c\x97,10|\xe5\xb1\xb1\xe8\xa5\xbf,11|\xe9\x99\x95\xe8\xa5\xbf,12|\xe5\xb1\xb1\xe4\xb8\x9c,13|\xe6\x96\xb0\xe7\x96\x86,14|\xe8\xa5\xbf\xe8\x97\x8f,15|\xe9\x9d\x92\xe6\xb5\xb7,16|\xe7\x94\x98\xe8\x82\x83,17|\xe5\xae\x81\xe5\xa4\x8f,18|\xe6\xb2\xb3\xe5\x8d\x97,19|\xe6\xb1\x9f\xe8\x8b\x8f,20|\xe6\xb9\x96\xe5\x8c\x97,21|\xe6\xb5\x99\xe6\xb1\x9f,22|\xe5\xae\x89\xe5\xbe\xbd,23|\xe7\xa6\x8f\xe5\xbb\xba,24|\xe6\xb1\x9f\xe8\xa5\xbf,25|\xe6\xb9\x96\xe5\x8d\x97,26|\xe8\xb4\xb5\xe5\xb7\x9e,27|\xe5\x9b\x9b\xe5\xb7\x9d,28|\xe5\xb9\xbf\xe4\xb8\x9c,29|\xe4\xba\x91\xe5\x8d\x97,30|\xe5\xb9\xbf\xe8\xa5\xbf,31|\xe6\xb5\xb7\xe5\x8d\x97,32|\xe9\xa6\x99\xe6\xb8\xaf,33|\xe6\xbe\xb3\xe9\x97\xa8,34|\xe5\x8f\xb0\xe6\xb9\xbe'
    provinces = content1.split(',')
TypeError: a bytes-like object is required, not 'str'

完全零基础,问题比较傻,烦请先生讲解一下,感谢
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

95#
发表于 2016-10-29 17:07:55 |只看该作者
moredear 发表于 2016-10-29 07:16
Crossing 先生

python版本3.5,mac系统

python3这里读到了一个bytes类型,你要先转成str
content1 = content1.decode('utf8')
然后再来做 split

不过我这里查询这个接口发现已经是失败了,你那里居然还可以请求到数据……
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

72

积分

注册会员

Rank: 2

96#
发表于 2016-10-29 23:38:27 |只看该作者
crossin先生 发表于 2016-10-29 17:07
python3这里读到了一个bytes类型,你要先转成str
content1 = content1.decode('utf8')
然后再来做 split

解决了,多谢先生!

请求到数据大概就是传说中新手的好运气吧
回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

97#
发表于 2016-11-18 10:09:35 |只看该作者
老师,我仿照下面的代码输入之后,并没有输出东西,连乱码都没有

#coding : cp936
import urllib2
import json
url = 'http://wthrcdn.etouch.cn/weather_mini?city=北京'
content = urllib2.urlopen(url).read()
print content

求指导。。
爬虫刚入门,就爬不下去了
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

98#
发表于 2016-11-18 14:32:55 |只看该作者
yyn 发表于 2016-11-18 10:09
老师,我仿照下面的代码输入之后,并没有输出东西,连乱码都没有

#coding : cp936

不应该什么都没有啊,至少也有报错
你发截图来看看。

另外你可以改用 requests 包,会比较好用。编辑器也可以换成pycharm,然后它的编码设置成 utf8
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

99#
发表于 2016-12-19 12:55:19 |只看该作者
crossin先生,代码第25行,是不是应改为“line = "    '%s': '101%s',\n" % (name, code)”
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

100#
发表于 2016-12-19 13:09:59 |只看该作者
study@python 发表于 2016-12-19 12:55
crossin先生,代码第25行,是不是应改为“line = "    '%s': '101%s',\n" % (name, code)”
...

你拿到最后一层,应该是类似这样的结果:
020101|101020100
后面那部分就是完整代码,所以不需要再加101
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

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

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部