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

本文介绍如何使用chardet库自动检测网页的字符编码,包括其官方文档、安装步骤,并通过实例演示了如何在爬虫中应用chardet解决乱码问题,提升抓取效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


在这里插入图片描述

一、前言

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

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

二、chardet

  • 官方文档:

https://pypi.org/project/chardet/

  • 安装
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:https://blog.csdn.net/qq_44921056
本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱打瞌睡的CV君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值