找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3347|回复: 6

[求助] 为什么第一个会乱码

5

主题

11

帖子

11

积分

贫民

积分
11
yingmu1117 发表于 2017-3-29 16:34:09 | 显示全部楼层 |阅读模式
本来想爬房产网站的二手房信息,然后用beautifulsoup分析,结果用urllib.request爬取下来的信息全是乱码,用requests就不乱码,不知道为什么,网页源码格式显示是gb2312,编程环境win7 32  python 3.5   在jiebrain里边写的

代码1
import urllib.request
from bs4 import BeautifulSoup
req = 'http://esf.qd.fang.com/house-a01142/i31/'
#print(req)
response = urllib.request.urlopen(req)
the_page = response.read()
t=the_page.decode('gb2312','ignore')
print(t)
运行显示乱码,用print输出还需要encode 吗?
代码2import requests
from bs4 import BeautifulSoup
url="http://esf.qd.fang.com/house-a01142/i31/"
resp=requests.get(url)
print ( resp.text)可以正常运行没有乱码


回复

使用道具 举报

5

主题

101

帖子

101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
101

最佳新人活跃会员热心会员突出贡献

QQ
落叶秋风 发表于 2017-3-29 20:39:27 | 显示全部楼层
因为我们一般设置自己的编码方式是utf-8,你说的那个网站是gb2312编码方式的,你从网上读取源码下来他的格式还是gb2312,如果没转换编码方式直接打印到屏幕上就是乱码,你出现乱码的原因,就是编码问题,就是网站源码的编码跟你的默认编码方式不一致导致的
回复 支持 反对

使用道具 举报

5

主题

11

帖子

11

积分

贫民

积分
11
yingmu1117  楼主| 发表于 2017-3-29 21:12:56 | 显示全部楼层
那样的话第一段程序应该如何修改?我已经用decode 解码成unicode了,输出的时候还需要用encode重新编码?
回复 支持 反对

使用道具 举报

5

主题

101

帖子

101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
101

最佳新人活跃会员热心会员突出贡献

QQ
落叶秋风 发表于 2017-3-30 09:55:09 | 显示全部楼层
是的,就是先按他自己的编码方式解码成unicode,再从unicode编码成自己的默认编码方式
回复 支持 反对

使用道具 举报

5

主题

11

帖子

11

积分

贫民

积分
11
yingmu1117  楼主| 发表于 2017-3-30 16:11:30 | 显示全部楼层
如果那样的话,我encode后print出来全是字节显示啊
回复 支持 反对

使用道具 举报

5

主题

101

帖子

101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
101

最佳新人活跃会员热心会员突出贡献

QQ
落叶秋风 发表于 2017-4-5 14:50:04 | 显示全部楼层
yingmu1117 发表于 2017-3-30 16:11
如果那样的话,我encode后print出来全是字节显示啊

print str.decode('gb2312').encode('utf-8')
回复 支持 反对

使用道具 举报

3

主题

24

帖子

24

积分

贫民

积分
24
ccwybatn 发表于 2017-4-5 17:19:02 | 显示全部楼层
虽然我也不是很厉害,但是书上说最好是按照原来的编码进行下载,我一般都是爬下来的东西直接写入文档,然后再进行操作,写入的时候要用open(filename,'wb')方式,因为wb方式可以避免一些编码丢失
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表