鱼C论坛

 找回密码
 立即注册
查看: 2472|回复: 9

萌新想问一个问题,抓取网页信息的时候为什么中文显示不出来呢?

[复制链接]
发表于 2017-4-13 17:05:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今天试着用py抓取一下网页信息,返回来的信息中本该是中文的,结果显示为符号数字的样子,然后通过百度解决问题用了 chardet也不行,所以想求助一下
import urllib.request
import sys
import chardet

req = urllib.request.urlopen("http://m.maoyan.com/shows/13496?_v_=yes#").read()
typeEncode=sys.getfilesystemencoding()

infoencode=chardet.detect(req).get('encoding','utf-8')
html=req.decode(infoencode,'ignore').encode(typeEncode)
print(html)
这个是百度的解决办法

图片上有标注

图片上有标注
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-4-13 17:16:44 | 显示全部楼层
  1. req.decode(infoencode,'ignore').encode(typeEncode)
复制代码
修改成
  1. req.decode('utf-8').encode('gb2312')  
复制代码



百度答案虽好,但是你要注意消化,百度那个编码只是一个示例,并不一定适用所有的
你试下我这个看下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-13 17:17:40 | 显示全部楼层
检测了一下页面的编码是utf-8
QQ图片20170413171657.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-13 17:45:01 | 显示全部楼层

还是不行的会报错,我看了一下这个页面是utf-8的    但是中文显示的就是数字和符号
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-13 17:49:05 | 显示全部楼层
本帖最后由 lumber2388779 于 2017-4-13 17:52 编辑
funnyman 发表于 2017-4-13 17:45
还是不行的会报错,我看了一下这个页面是utf-8的    但是中文显示的就是数字和符号

  1. import urllib.request
  2. import sys

  3. req = urllib.request.urlopen("http://m.maoyan.com/shows/13496?_v_=yes#").read()
  4. typeEncode=sys.getfilesystemencoding()

  5. html=req.decode('utf-8')
  6. print(html)
复制代码


你的报错应该是No module named 'chardet' 你没有安装相应的模块,本身编码是utf-8只需要解码就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-13 17:56:23 | 显示全部楼层
lumber2388779 发表于 2017-4-13 17:49
你的报错应该是No module named 'chardet' 你没有安装相应的模块,本身编码是utf-8只需要解码就可 ...

谢谢你,可能是我的问题问的不对,我已经解决了,在返回中显示的\x95\xb0\xe5\xad\x97\xe7\x94\xb5\xe5\xbd\xb1\xe9\这种是byte字节,python 3输出位串,而不是可读的字符串,需要对其进行转换,使用str(string[, encoding])对数组进行转换
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-13 17:57:17 | 显示全部楼层
lumber2388779 发表于 2017-4-13 17:49
你的报错应该是No module named 'chardet' 你没有安装相应的模块,本身编码是utf-8只需要解码就可 ...

我改成了这样import urllib.request
import chardet

req = urllib.request.urlopen("http://m.maoyan.com/shows/13496?_v_=yes#").read()
html = str(req,"utf-8")



print(html)就可以了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-13 18:01:08 | 显示全部楼层
funnyman 发表于 2017-4-13 17:57
我改成了这样import urllib.request
import chardet


自己解决最好,这样才能记得牢,不过我刚才试了我那样去print出来在idle是显示中文的,你用的是pycharm吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-13 18:05:20 | 显示全部楼层
lumber2388779 发表于 2017-4-13 18:01
自己解决最好,这样才能记得牢,不过我刚才试了我那样去print出来在idle是显示中文的,你用的是pycharm ...

最开始两个都用了,都会显示成那种字符串
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-13 18:09:44 | 显示全部楼层
lumber2388779 发表于 2017-4-13 18:01
自己解决最好,这样才能记得牢,不过我刚才试了我那样去print出来在idle是显示中文的,你用的是pycharm ...

还是要谢谢版主的,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-10 02:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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