php网页抓取乱码(如何找到需要的网页的编码格式不一致的可靠代码)
优采云 发布时间: 2022-01-04 02:19php网页抓取乱码(如何找到需要的网页的编码格式不一致的可靠代码)
一、乱码问题描述
在抓取或执行某些操作时,经常会出现中文乱码等问题,如下
原因是源网页编码与抓取的编码格式不一致
二、使用encode和decode解决乱码问题
Python 中字符串的内部表示是 unicode 编码。编码转换时,通常使用unicode作为中间编码,即先将其他编码的字符串解码成unicode,再从unicode(encode)编码成另一种编码。
的作用
decode是将其他编码的字符串转换为unicode编码,如str1.decode(‘gb2312'),表示将gb2312编码的字符串str1转换为unicode编码。
的作用
encode就是把unicode编码转换成其他编码的字符串,比如str2.encode('utf-8'),就是把unicode编码的字符串str2转换成utf-8编码。
Decode就是你要抓取的网页的编码,encode就是你要设置的编码
代码如下
#!/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、检查元素并查看响应头
以上是小编介绍的Python解决爬取内容乱码(decode和encodedecode)问题的详细讲解和集成。我希望它会对你有所帮助。如果您有任何问题,请给我留言。小编会及时回复大家。非常感谢您对码农之家的支持网站!