本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、前言
练习爬虫的许多小伙伴,在爬取网页时,肯定遇到过页面乱码的情况,其实是网页编码没有成功配对。
虽然在HTML页面中有charset标签,可以查看,或者一种一种编码地试,大概率也能不难地实现。那如果有第三方库,帮助我们检测网页编码,岂不美哉!于是就有了这篇文章“主角”的登场:chardet
二、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:blog.csdn.net/qq_44921056 本文仅用于交流学习,未经作者允许,禁止转载,更勿做其他用途,违者必究。