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代码做configure文件
Jul 20 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Python matplotlib画图实例之绘制拥有彩条的图表
Dec 28 Python
python合并同类型excel表格的方法
Apr 01 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
python微信撤回监测代码
Apr 29 Python
关于python中密码加盐的学习体会小结
Jul 15 Python
python中的 zip函数详解及用法举例
Feb 16 Python
Pycharm中import torch报错的快速解决方法
Mar 05 Python
基于Python计算圆周率pi代码实例
Mar 25 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
Oct 12 Python
python mock测试的示例
Oct 19 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递归json类实例
2014/12/02 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
深入浅析用PHP实现MVC
2016/03/02 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
JavaScript中神奇的call()方法
2015/03/12 Javascript
jquery实现从数组移除指定的值
2015/06/24 Javascript
JS获取下拉框显示值和判断单选按钮的方法
2015/07/09 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
js转换对象为xml
2017/02/17 Javascript
AngularJS中的拦截器实例详解
2017/04/07 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
angularJS开发注意事项
2018/05/26 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
Vue使用Proxy代理后仍无法生效的解决
2020/11/13 Javascript
python strip()函数 介绍
2013/05/24 Python
对于Python的Django框架部署的一些建议
2015/04/09 Python
使用Python实现企业微信的自动打卡功能
2019/04/30 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
2019/08/02 Python
Python测试模块doctest使用解析
2019/08/10 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
Django自定义列表 models字段显示方式
2020/04/03 Python
JupyterNotebook 输出窗口的显示效果调整方法
2020/04/13 Python
css3实现画半圆弧线的示例代码
2017/11/06 HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
2021/02/24 HTML / CSS
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
争先创优演讲稿
2014/09/15 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
创业计划书之酒店
2019/08/30 职场文书
Django路由层如何获取正确的url
2021/07/15 Python