Python爬虫有用的库:chardet,自动检测字符编码

235 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 在这里插入图片描述

一、前言

练习爬虫的许多小伙伴,在爬取网页时,肯定遇到过页面乱码的情况,其实是网页编码没有成功配对。

虽然在HTML页面中有charset标签,可以查看,或者一种一种编码地试,大概率也能不难地实现。那如果有第三方库,帮助我们检测网页编码,岂不美哉!于是就有了这篇文章“主角”的登场:chardet 在这里插入图片描述

二、chardet

  • 官方文档:

pypi.org/project/cha…

  • 安装
pip install chardet

在这里插入图片描述

三、简单的应用

首先,介绍一下chardet.detect()函数

detect()函数接受一个参数,一个非unicode字符串。它返回一个字典,其中包含自动检测到的字符编码和从0到1的可信度级别。

返回的内容有三个: encoding:表示字符编码方式。 confidence:表示可信度,也可以理解为检测的概率。 language:语言。

我们用这个函数来分别检测gbk,utf-8,日文

import chardet

str1 = "离离原上草,一岁一枯荣".encode('gbk')
str2 = "野火烧不尽,春风吹又生".encode('utf-8')
str3 = "こんにちは".encode('euc-jp')

print(chardet.detect(str1))
print(chardet.detect(str2))
print(chardet.detect(str3))

检测结果如下:

{'encoding': 'GB2312', 'confidence': 0.7407407407407407, 'language': 'Chinese'}
{'encoding': 'utf-8', 'confidence': 0.99, 'language': ''}
{'encoding': 'EUC-JP', 'confidence': 0.99, 'language': 'Japanese'}
#  其中GBK是GB2312的子集,所以说检测结果是正确的

大概率其实都是正确的。

这里检测的结果返回的是字典,而我们需要的是encoding的内容,即

chardet.detect()['encoding']
  • 爬虫实例

获取百度翻译页面 ①、一般写法

import requests
import chardet

headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/'
              '537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36'
}

url = 'https://fanyi.baidu.com/'

res = requests.get(url=url, headers=headers)
res.encoding = "utf-8" # 注意这行代码的比较 

print(res.text)

②、使用chardet库

import requests
import chardet

headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/'
              '537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36'
}

url = 'https://fanyi.baidu.com/'

res = requests.get(url=url, headers=headers)
res.encoding = chardet.detect(res.content)['encoding'] # 关键,获取检测结果的encoding的值

print(res.text)

在这里插入图片描述 相比之下,使用chardet库,可以自动确定字符编码,方便许多!

作者:远方的星 CSDN:blog.csdn.net/qq_44921056 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。