python3的UnicodeDecodeError解决方法


Posted in Python onDecember 20, 2019

爬虫部分解码异常

response.content.decode() # 默认使用 utf-8 出现解码异常

python3的UnicodeDecodeError解决方法

以下是设计的通用解码

通过 text 获取编码

# 通过 text 获取编码
import requests
from lxml import etree


def public_decode():
 headers = {
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
 }
 response = requests.get('https://blog.csdn.net/a13951206104', headers=headers)
 html = etree.HTML(response.text) # response.text 能自动获取编码, 大多乱码
 _charset = html.xpath('//@charset') or []
 if _charset:
  encode_content = response.content.decode(_charset[0].strip().lower(),
             errors='replace') # 如果设置为replace,则会用?取代非法字符;
  return {'response_text': encode_content, "response_obj": response}
 for _charset_ in ['utf-8', 'gbk', 'gb2312'] # 国内主要这3种:
  if '�' not in response.content.decode(_charset_, errors='replace'):
   return {'response_text': response.content.decode(_charset_, errors='replace'),
     "response_obj": response}
  else:
   # 默认还得是 utf-8
   return {'response_text': response.content.decode('utf-8', errors='replace'),
     "response_obj": response}

通过数据 来解编码(推荐)

def public_decode(response):
 headers = {
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
 }
 response = requests.get('https://blog.csdn.net/a13951206104', headers=headers)
 html = etree.HTML(response.text)
 # 不希望抓下来的数据中有非法字符
 item = dict()
 result = None
 for _charset_ in ['utf-8', 'gbk', 'gb2312']:
  if response:
   result = response.content.decode(_charset_, errors='replace')
   item['content'] = html.xpath('//*[@id="content"]')
   if '�' not in result['content'].strip():
    result =response.content.decode(_charset_, errors='replace')
    break
 if not result:
  # 默认 utf-8
  result = response.content.decode(_charset_, errors='replace')

errors=‘replace' 使解码不报异常, 然后把几个常用的编码一个个试下, 最后要看落下来的数据, 所以最好拿数据 去获取合适的编码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
自动化Nginx服务器的反向代理的配置方法
Jun 28 Python
Python对列表去重的多种方法(四种方法)
Dec 05 Python
Tornado高并发处理方法实例代码
Jan 15 Python
Python 输出时去掉列表元组外面的方括号与圆括号的方法
Dec 24 Python
python计算阶乘和的方法(1!+2!+3!+...+n!)
Feb 01 Python
python修改FTP服务器上的文件名
Sep 11 Python
python用pip install时安装失败的一系列问题及解决方法
Feb 24 Python
Scrapy模拟登录赶集网的实现代码
Jul 07 Python
利用python下载scihub成文献为PDF操作
Jul 09 Python
python boto和boto3操作bucket的示例
Oct 30 Python
详解利用python识别图片中的条码(pyzbar)及条码图片矫正和增强
Nov 17 Python
基于python的matplotlib制作双Y轴图
Apr 20 Python
基于python调用psutil模块过程解析
Dec 20 #Python
python如何使用jt400.jar包代码实例
Dec 20 #Python
基于python使用tibco ems代码实例
Dec 20 #Python
使用python实现数组、链表、队列、栈的方法
Dec 20 #Python
python隐藏类中属性的3种实现方法
Dec 19 #Python
Python合并2个字典成1个新字典的方法(9种)
Dec 19 #Python
关于Python中定制类的比较运算实例
Dec 19 #Python
You might like
杏林同学录(八)
2006/10/09 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
PHP通过引用传递参数用法分析
2016/12/01 PHP
使用phpQuery获取数组的实例
2017/03/13 PHP
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
浅析Js中的单引号与双引号问题
2013/11/06 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
jQuery的css()方法用法实例
2014/12/24 Javascript
页面get请求 中文参数方法乱码问题的快速解决方法
2016/05/31 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
2017/04/13 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
VueJs组件prop验证简单介绍
2017/09/12 Javascript
基于jQuery实现定位导航位置效果
2017/11/15 jQuery
一个基于react的图片裁剪组件示例
2018/04/18 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
nuxt.js服务端渲染中axios和proxy代理的配置操作
2020/11/06 Javascript
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
Python EOL while scanning string literal问题解决方法
2020/09/18 Python
详解django中使用定时任务的方法
2018/09/27 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
Python、 Pycharm、Django安装详细教程(图文)
2019/04/12 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
python wsgiref源码解析
2021/02/06 Python
以色列的身体护理及家居香薰品牌:Sabon NYC
2018/02/23 全球购物
日语专业推荐信
2013/11/12 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
我的梦中国梦演讲稿
2014/04/23 职场文书
三分钟演讲稿范文
2014/04/24 职场文书
法人单位适用的授权委托书
2014/09/19 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
Python实现信息轰炸工具(再也不怕说不过别人了)
2021/06/11 Python
SpringBoot集成Redis的思路详解
2021/10/16 Redis
MySQL限制查询和数据排序介绍
2022/03/25 MySQL
关于JS中的作用域中的问题思考分享
2022/04/06 Javascript