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 相关文章推荐
web.py获取上传文件名的正确方法
Aug 26 Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 Python
Python实现识别手写数字大纲
Jan 29 Python
python获取当前目录路径和上级路径的实例
Apr 26 Python
解决PyCharm控制台输出乱码的问题
Jan 16 Python
pyqt远程批量执行Linux命令程序的方法
Feb 14 Python
python3人脸识别的两种方法
Apr 25 Python
django orm模块中的 is_delete用法
May 20 Python
如何用Anaconda搭建虚拟环境并创建Django项目
Aug 02 Python
python3实现简单飞机大战
Nov 29 Python
OpenCV3.3+Python3.6实现图片高斯模糊
May 18 Python
Python访问Redis的详细操作
Jun 26 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
PHP5各个版本的新功能和新特性总结
2014/03/16 PHP
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
ModelDialog JavaScript模态对话框类代码
2011/04/17 Javascript
深入浅出分析javaScript中this用法
2015/05/09 Javascript
使用jquery插件qrcode生成二维码
2015/10/22 Javascript
JavaScrip常见的一些算法总结
2015/12/28 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
JavaScript数据结构之二叉树的删除算法示例
2017/04/13 Javascript
AngulaJS路由 ui-router 传参实例
2017/04/28 Javascript
nodejs6下使用koa2框架实例
2017/05/18 NodeJs
JavaScript实现短信倒计时60s
2017/10/09 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
讲解vue-router之什么是嵌套路由
2018/05/28 Javascript
eslint+prettier统一代码风格的实现方法
2020/07/22 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
重命名批处理python脚本
2013/04/05 Python
python实现各种插值法(数值分析)
2019/07/30 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
tensorflow使用CNN分析mnist手写体数字数据集
2020/06/17 Python
Pandas的Apply函数具体使用
2020/07/21 Python
战友聚会邀请函
2014/01/18 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
幼儿园家长寄语
2014/04/02 职场文书
生产文员岗位职责
2014/04/05 职场文书
航海技术专业毕业生求职信
2014/04/06 职场文书
普通党员对照检查材料
2014/08/28 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
《我是什么》教学反思
2016/02/16 职场文书
python如何做代码性能分析
2021/04/26 Python
vue 给数组添加新对象并赋值
2022/04/20 Vue.js
使用HBuilder制作一个简单的HTML5网页
2022/07/07 HTML / CSS