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 相关文章推荐
python33 urllib2使用方法细节讲解
Dec 03 Python
Python编程中的反模式实例分析
Dec 08 Python
python在Windows8下获取本机ip地址的方法
Mar 14 Python
python查找指定具有相同内容文件的方法
Jun 28 Python
Flask 让jsonify返回的json串支持中文显示的方法
Mar 26 Python
对Tensorflow中的矩阵运算函数详解
Jul 27 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
Python脚本操作Excel实现批量替换功能
Nov 20 Python
Django2 连接MySQL及model测试实例分析
Dec 10 Python
django 多数据库及分库实现方式
Apr 01 Python
Django如何在不停机的情况下创建索引
Aug 02 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 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
Discuz 模板语句分析及知识技巧
2009/08/21 PHP
php版银联支付接口开发简明教程
2016/10/14 PHP
treepanel动态加载数据实现代码
2012/12/15 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
谈谈Jquery中的children find 的区别有哪些
2015/10/19 Javascript
jQuery多条件筛选如何实现
2015/11/04 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
微信小程序 实战实例开发流程详细介绍
2017/01/05 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
2017/09/26 jQuery
使用vue-router设置每个页面的title方法
2018/02/11 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(下)
2018/04/18 Javascript
Hexo已经看腻了,来手把手教你使用VuePress搭建个人博客
2018/04/26 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
JS实现把一个页面层数据传递到另一个页面的两种方式
2018/08/13 Javascript
解决vue2.0路由跳转未匹配相应用路由避免出现空白页面的问题
2018/08/24 Javascript
vue-cli3 引入 font-awesome的操作
2020/08/11 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
Vue时间轴 vue-light-timeline的用法说明
2020/10/29 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
vue3.0中使用element的完整步骤
2021/03/04 Vue.js
[08:54]DOTA2-DPC中国联赛 正赛 Aster vs LBZS 选手采访
2021/03/11 DOTA
使用Python脚本将文字转换为图片的实例分享
2015/08/29 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
在python中利用opencv简单做图片比对的方法
2019/01/24 Python
Python中判断子串存在的性能比较及分析总结
2019/06/23 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
2019/08/20 Python
python实现大量图片重命名
2020/03/23 Python
python实现飞机大战游戏(pygame版)
2020/10/26 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
python math模块的基本使用教程
2021/01/16 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
乡镇综治宣传月活动总结
2014/07/02 职场文书
2014年入党积极分子党校培训心得体会
2014/07/08 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
MySQL日期时间函数知识汇总
2022/03/17 MySQL