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 相关文章推荐
python实现备份目录的方法
Aug 03 Python
python实现随机梯度下降(SGD)
Mar 24 Python
PyTorch上搭建简单神经网络实现回归和分类的示例
Apr 28 Python
python爬取网易云音乐评论
Nov 16 Python
用Pycharm实现鼠标滚轮控制字体大小的方法
Jan 15 Python
Python基于opencv调用摄像头获取个人图片的实现方法
Feb 21 Python
python腾讯语音合成实现过程解析
Aug 01 Python
python 控制Asterisk AMI接口外呼电话的例子
Aug 08 Python
PyTorch之图像和Tensor填充的实例
Aug 18 Python
python中property属性的介绍及其应用详解
Aug 29 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 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
PHP如何透过ODBC来存取数据库
2006/10/09 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
了解PHP的返回引用和局部静态变量
2015/06/04 PHP
PHP获取input输入框中的值去数据库比较显示出来
2016/11/16 PHP
浅谈socket同步和异步、阻塞和非阻塞、I/O模型
2016/12/15 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
解决bootstrap中modal遇到Esc键无法关闭页面
2015/03/09 Javascript
JS动态改变表格边框宽度的方法
2015/03/31 Javascript
每天一篇javascript学习小结(String对象)
2015/11/18 Javascript
javascript新闻跑马灯实例代码
2020/07/29 Javascript
Bootstrap实现input控件失去焦点时验证
2016/08/04 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
node.js学习之事件模块Events的使用示例
2017/09/28 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
关于ES6箭头函数中的this问题
2018/02/27 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
python实现的文件同步服务器实例
2015/06/02 Python
利用Opencv中Houghline方法实现直线检测
2018/02/11 Python
Python 实现字符串中指定位置插入一个字符
2018/05/02 Python
tensorflow实现逻辑回归模型
2018/09/08 Python
python中dict()的高级用法实现
2019/11/13 Python
Python如何解除一个装饰器
2020/08/07 Python
python实现企业微信定时发送文本消息的实例代码
2020/11/25 Python
实例教程 HTML5 Canvas 超炫酷烟花绽放动画实现代码
2014/11/05 HTML / CSS
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
SQL面试题
2013/04/30 面试题
手机业务员岗位职责
2013/12/13 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers