网页抓取解密(如何找到需要的网页编码格式不一致与decode解决乱码问题 )

优采云 发布时间: 2021-10-06 06:22

  网页抓取解密(如何找到需要的网页编码格式不一致与decode解决乱码问题

)

  一、乱码问题说明

  在爬虫或某些操作过程中,经常会出现中文乱码等问题,如下图所示

  

  原因是向下爬行后,源页面代码与代码格式不一致

  二、使用编码和解码来解决乱码问题

  Python中字符串的内部表示是Unicode编码。在编码转换过程中,通常使用Unicode作为中间编码,即将其他编码字符串解码为Unicode,然后将其编码为另一种编码

  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、查看网页源代码

  

  如果源代码中没有字符集编码格式,则可以使用以下方法

  2、检查元素并查看响应标题

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线