php网页抓取乱码(利用encode与decode解决乱码问题的解决方法有哪些?)

优采云 发布时间: 2022-01-26 08:25

  php网页抓取乱码(利用encode与decode解决乱码问题的解决方法有哪些?)

  一、乱码问题描述

  经常在爬虫或者一些操作中,经常会出现中文乱码等问题,如下

  原因是源网页的编码与爬取后的编码格式不一致。

  二、使用encode和decode解决乱码问题

  Python 中字符串的内部表示是 unicode 编码。在进行编码转换时,通常需要使用unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再将unicode编码(encode)成另一种编码。

  decode的作用是将其他编码的字符串转成unicode编码,如str1.decode('gb2312'),意思是将gb2312编码的字符串str1转换成u source gaodai#ma#com *generation#代码net nicode 编码。

  encode的作用是将unicode编码转换为其他编码字符串,如str2.encode('utf-8'),意思是将unicode编码的字符串str2转换为utf-8编码。

  decode里面写的是你要抓取的网页的code,encode是你要设置的code

  代码显示如下

   #!/usr/bin/env python # -*- coding:utf-8 -*- # author: xulinjie time:2017/10/22 import urllib2 request=urllib2.Request(r'http://nhxy.zjxu.edu.cn/') RES=urllib2.urlopen(request).read() RES = RES.decode('gb2312').encode('utf-8')//解决乱码 wfile=open(r'./1.html',r'wb') wfile.write(RES) wfile.close() print RES

  或者

   #!/usr/bin/env python # -*- coding:utf-8 -*- # author: xulinjie time:2017/10/22 import urllib2 request=urllib2.Request(r'http://nhxy.zjxu.edu.cn/') RES=urllib2.urlopen(request).read() RES=RES.decode('gb2312') RES=RES.encode('utf-8') wfile=open(r'./1.html',r'wb') wfile.write(RES) wfile.close() print RES

  但还要注意:

  如果一个字符串已经是unicode,那么解码就会出错,所以通常需要判断编码方式是否是unicode

  isinstance(s, unicode)#用于判断是否为unicode

  用非unicode编码的str编码会报错

  所以最终可靠的代码:

   #!/usr/bin/env python # -*- coding:utf-8 -*- # author: xulinjie time:2017/10/22 import urllib2 request=urllib2.Request(r'http://nhxy.zjxu.edu.cn/') RES=urllib2.urlopen(request).read() if isinstance(RES, unicode): RES=RES.encode('utf-8') else: RES=RES.decode('gb2312').encode('utf-8') wfile=open(r'./1.html',r'wb') wfile.write(RES) wfile.close() print RES

  三、如何找到需要爬取的着陆页的编码格式

  1、查看网页源代码

  如果源码中没有charset编码格式显示,可以使用下面的方法

  2、检查元素,查看响应标头

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线