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语言编写电脑时间自动同步小工具
Mar 08 Python
Python日志模块logging简介
Apr 13 Python
谈谈Python进行验证码识别的一些想法
Jan 25 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
Jun 07 Python
[原创]pip和pygal的安装实例教程
Dec 07 Python
python爬虫获取淘宝天猫商品详细参数
Jun 23 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
python指定写入文件时的编码格式方法
Jun 07 Python
python二进制文件的转译详解
Jul 03 Python
python tornado使用流生成图片的例子
Nov 18 Python
tensorflow 变长序列存储实例
Jan 20 Python
python+selenium自动化实战携带cookies模拟登陆微博
Jan 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 日期时间处理函数小结
2009/12/18 PHP
PHP导入Excel到MySQL的方法
2011/04/23 PHP
PHP面向对象法则
2012/02/23 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
PHP多线程批量采集下载美女图片的实现代码(续)
2013/06/03 PHP
PHP的一个完美GIF等比缩放类,附带去除缩放黑背景
2014/04/01 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
php 如何获取文件的后缀名
2016/06/05 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
PHP面向对象程序设计之多态性的应用示例
2018/12/19 PHP
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
extjs3 combobox取value和text案例详解
2013/02/06 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
详解vue2.0组件通信各种情况总结与实例分析
2017/03/22 Javascript
关于axios不能使用Vue.use()浅析
2018/01/12 Javascript
vue 引用自定义ttf、otf、在线字体的方法
2019/05/09 Javascript
vue+canvas实现拼图小游戏
2020/09/18 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
Python CSV模块使用实例
2015/04/09 Python
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
Python使用crontab模块设置和清除定时任务操作详解
2019/04/09 Python
简单了解django orm中介模型
2019/07/30 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
请描述一下”is a”关系和”has a”关系
2015/02/03 面试题
创新比赛获奖感言
2014/02/13 职场文书
2014年情人节活动方案
2014/02/16 职场文书
基层党员公开承诺书
2014/05/29 职场文书
2014迎国庆演讲稿
2014/09/19 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
企业百日安全活动总结
2015/05/07 职场文书
钱学森观后感
2015/06/04 职场文书
单位车辆管理制度
2015/08/05 职场文书
mysql函数全面总结
2021/11/11 MySQL