当前位置: 首页 > 编程笔记 >

python3的UnicodeDecodeError解决方法

竺国兴
2023-03-14
本文向大家介绍python3的UnicodeDecodeError解决方法,包括了python3的UnicodeDecodeError解决方法的使用技巧和注意事项,需要的朋友参考一下

爬虫部分解码异常

response.content.decode() # 默认使用 utf-8 出现解码异常

以下是设计的通用解码

通过 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' 使解码不报异常, 然后把几个常用的编码一个个试下, 最后要看落下来的数据, 所以最好拿数据 去获取合适的编码

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍解决pyshp UnicodeDecodeError的问题,包括了解决pyshp UnicodeDecodeError的问题的使用技巧和注意事项,需要的朋友参考一下 用最新版本(2.1.0)的pyshp解析shp文件的records时: 如果records里面含有中文字段,那么就会报错: 这个是编解码的问题,解决方法是把版本降到1.2.12就可以了,虽然records里面的中文字段还

  • > 环境 幻影JS2。1.1;窗口10;硒-3.8.0;蟒蛇3 代码 问题 UnicodeDecodeError:'utf-8'编解码器无法解码位置2的字节0xbd:无效的开始字节 细节 回溯(最近一次调用):文件“d:/devtools/phantomjs-2.1.1-windows/bin/IndustryLeaderSpider.py”,第20行,在browser=webdriver中。Ph

  • 本文向大家介绍解决python3输入的坑——input(),包括了解决python3输入的坑——input()的使用技巧和注意事项,需要的朋友参考一下 如下所示: a,b,c,d = input() 很简单的代码,如果输入为 1 -1 -2 3 结果会报错,原因在于input函数会将你的输入作为python脚本运行,那么输入就变成了 1-1 -2 3,即0 -2 3 结果当然是错误的了,解决办法就

  • 问题内容: 如何解决? 在其他基于python的静态博客应用中,中文帖子可以成功发布。像这个程序:http : //github.com/vrypan/bucket3。在我的网站http://bc3.brite.biz/中,中文帖子可以成功发布。 问题答案: tl;dr / quick fix 不要对Willy Nilly进行解码/编码 不要以为你的字符串是UTF-8编码的 尝试在代码中尽快将字符

  • 本文向大家介绍Centos 升级到python3后pip 无法使用的解决方法,包括了Centos 升级到python3后pip 无法使用的解决方法的使用技巧和注意事项,需要的朋友参考一下 一. 问题 pip无法使用. 二. 系统环境 三. 解决方法 设置软连接. 1.查找pip所在位置 2.设置软连接 语法参见: 检测一下效果: 以上这篇Centos 升级到python3后pip 无法使用的解决方

  • 本文向大家介绍解决virtualenv -p python3 venv报错的问题,包括了解决virtualenv -p python3 venv报错的问题的使用技巧和注意事项,需要的朋友参考一下 在阿里云服务器上,用virtualenv创建虚拟环境时,报了个错误 看到HTTPError: 404 Client Error: Not Found for url: http://mirrors.ali