前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python爬虫有用的库:chardet

Python爬虫有用的库:chardet

原创
作者头像
远方的星
修改2021-08-11 14:46:34
9050
修改2021-08-11 14:46:34
举报

一、前言

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

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

二、chardet

  • 官方文档:

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

  • 安装
代码语言:txt
复制
pip install chardet

三、简单的应用

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

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

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

language:语言。

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

代码语言:txt
复制
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))

检测结果如下:

代码语言:txt
复制
{'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的内容,即

代码语言:txt
复制
chardet.detect()['encoding']
  • 爬虫实例

获取百度翻译页面

①、一般写法

代码语言:txt
复制
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库

代码语言:txt
复制
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

本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、chardet
  • 三、简单的应用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档