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 相关文章推荐
在Django的URLconf中使用多个视图前缀的方法
Jul 18 Python
Python 序列的方法总结
Oct 18 Python
独特的python循环语句
Nov 20 Python
python中字符串内置函数的用法总结
Sep 13 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
python实现视频读取和转化图片
Dec 10 Python
Python 限定函数参数的类型及默认值方式
Dec 24 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
python制作一个简单的gui 数据库查询界面
Nov 19 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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,不用COM,生成excel文件
2006/10/09 PHP
快速配置PHPMyAdmin方法
2008/06/05 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
ExtJS 下拉多选框lovcombo
2010/05/19 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
实现高性能JavaScript之执行与加载
2016/01/30 Javascript
JS获取子窗口中返回的数据实现方法
2016/05/28 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
原生js实现吸顶效果
2017/03/13 Javascript
xmlplus组件设计系列之分隔框(DividedBox)(8)
2017/05/02 Javascript
JS使用正则表达式验证身份证号码
2017/06/23 Javascript
JS实现图片拖拽交换效果
2018/11/30 Javascript
13 个npm 快速开发技巧(推荐)
2019/07/04 Javascript
[03:09]2014DOTA2国际邀请赛 Mushi前队友送上祝福
2014/07/12 DOTA
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
numpy linalg模块的具体使用方法
2019/05/26 Python
在Python中COM口的调用方法
2019/07/03 Python
详解程序意外中断自动重启shell脚本(以Python为例)
2019/07/26 Python
Python容器类型公共方法总结
2020/08/19 Python
Python实现简单猜数字游戏
2021/02/03 Python
利用CSS3实现文字折纸效果实例代码
2018/07/10 HTML / CSS
HTML5对比HTML4的主要改变和改进总结
2016/05/27 HTML / CSS
Roxy美国官网:澳大利亚冲浪、滑雪健身品牌
2016/07/30 全球购物
美国韩国化妆品和护肤品购物网站:Beautytap
2018/07/29 全球购物
实习生自荐信范文分享
2013/11/27 职场文书
大一新生军训时的自我评价分享
2013/12/05 职场文书
秦兵马俑教学反思
2014/02/07 职场文书
银行贷款承诺书
2014/03/29 职场文书
2014年感恩母亲演讲稿
2014/05/27 职场文书
关于教师节的广播稿
2014/09/10 职场文书
党员作风建设整改方案
2014/10/27 职场文书
2015年度学校卫生工作总结
2015/05/12 职场文书
法制教育讲座心得体会
2016/01/14 职场文书
《学会看病》教学反思
2016/02/17 职场文书
python中的getter与setter你了解吗
2022/03/24 Python