0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

chardet庫(kù)的安裝與介紹

科技綠洲 ? 來源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-31 15:30 ? 次閱讀

1.chardet庫(kù)的安裝與介紹

玩兒過爬蟲的朋友應(yīng)該知道,在爬取不同的網(wǎng)頁(yè)時(shí),返回結(jié)果會(huì)出現(xiàn)亂碼的情況。比如,在爬取某個(gè)中文網(wǎng)頁(yè)的時(shí)候,有的頁(yè)面使用GBK/GB2312,有的使用UTF8,如果你需要去爬一些頁(yè)面,知道網(wǎng)頁(yè)編碼很重要的。

雖然HTML頁(yè)面有charset標(biāo)簽,但是有些時(shí)候是不對(duì)的,那么chardet就能幫我們大忙了。使用 chardet 可以很方便的實(shí)現(xiàn)字符串/文件的編碼檢測(cè)。

如果你安裝過Anaconda,那么可以直接使用chardet庫(kù)。如果你只是安裝了Python的話,就需要使用下面幾行代碼,完成chardet庫(kù)的安裝。

pip install chardet

接著,使用下面這行代碼,導(dǎo)入chardet庫(kù)。

import chardet

2.chardet庫(kù)的使用

這個(gè)小節(jié),我們分3部分講解。

2.1 chardet.detect()函數(shù)

detect()函數(shù)接受一個(gè)參數(shù),一個(gè)非unicode字符串。它返回一個(gè)字典,其中包含自動(dòng)檢測(cè)到的字符編碼和從0到1的可信度級(jí)別。

  • encoding:表示字符編碼方式。
  • confidence:表示可信度。
  • language:語言。

光看這個(gè)解釋,大多數(shù)朋友可能看不懂,下面我們就用例子來講述這個(gè)函數(shù)。

2.2 使用該函數(shù)分別檢測(cè)gbk、utf-8和日語

檢測(cè)gbk編碼的中文:

str1 = '大家好,我是黃同學(xué)'.encode('gbk')
chardet.detect(str1)

chardet.detect(str1)["encoding"]

結(jié)果如下:

圖片

檢測(cè)的編碼是GB2312,注意到GBK是GB2312的父集,兩者是同一種編碼,檢測(cè)正確的概率是99%,language字段指出的語言是'Chinese'。

檢測(cè)utf-8編碼的中文:

str2 = '我有一個(gè)夢(mèng)想'.encode('utf-8')
chardet.detect(str2)

chardet.detect(str2)["encoding"]

結(jié)果如下:

圖片

檢測(cè)一段日文:

str3 = 'ありがとう'.encode('euc-jp')
chardet.detect(str3)

chardet.detect(str3)

結(jié)果如下:

圖片

2.3 如何在“爬蟲”中使用chardet庫(kù)呢?

我們以百度網(wǎng)頁(yè)為例子,進(jìn)行講述。

圖片

這個(gè)網(wǎng)頁(yè)的源代碼,使用的是什么編碼呢?我們看看源代碼:

圖片

從圖中可以看到,是utf-8字符編碼。

如果不使用chardet庫(kù),獲取網(wǎng)頁(yè)源代碼的時(shí)候,怎么指定字符編碼呢?

import chardet
import requests

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
response = requests.get('https://www.baidu.com',headers=headers)
response.encoding = "utf-8"
response.text

結(jié)果如下:

圖片

你會(huì)發(fā)現(xiàn):正確指定編碼后,沒有亂碼。如果你將編碼改為gbk,再看看結(jié)果。此時(shí)已經(jīng)亂碼。

圖片

如果使用chardet庫(kù),獲取網(wǎng)頁(yè)源代碼的時(shí)候,可以輕松指定字符編碼!

import chardet
import requests

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36'}
response = requests.get('https://www.baidu.com',headers=headers)

# 注意下面這行代碼,是怎么寫的?
response.encoding = chardet.detect(response.content)['encoding']
response.text

結(jié)果如下:

圖片

編碼不用我們自己查找,也不用猜,直接交給chardet庫(kù)去猜測(cè),正確率還高。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    915

    瀏覽量

    54651
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67770
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4753

    瀏覽量

    84081
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    OpenHarmony應(yīng)用開發(fā)安裝數(shù)學(xué)庫(kù)

    OpenHarmony應(yīng)用開發(fā)安裝數(shù)學(xué)庫(kù)
    的頭像 發(fā)表于 12-01 14:15 ?1087次閱讀
    OpenHarmony應(yīng)用開發(fā)<b class='flag-5'>安裝</b>數(shù)學(xué)<b class='flag-5'>庫(kù)</b>

    本地安裝并創(chuàng)建MySQL數(shù)據(jù)庫(kù)

    本地安裝并創(chuàng)建MySQL數(shù)據(jù)庫(kù)
    的頭像 發(fā)表于 01-13 15:15 ?768次閱讀
    本地<b class='flag-5'>安裝</b>并創(chuàng)建MySQL數(shù)據(jù)<b class='flag-5'>庫(kù)</b>

    數(shù)據(jù)庫(kù)產(chǎn)品介紹與分類

    2-13-數(shù)據(jù)庫(kù)介紹及MySQL安裝
    發(fā)表于 08-01 10:45

    STM32CubeMx+JRE+HAL庫(kù)安裝教程

    Warning:寫作不易,請(qǐng)勿轉(zhuǎn)載,感謝!STM32CubeMx+JRE+HAL庫(kù)安裝教程寫作背景1:JRE程序包與介紹1.1:安裝JRE步驟2:STM32CubeMX
    發(fā)表于 08-11 08:46

    在MacOS M1上構(gòu)建期間出現(xiàn)“ModuleNotFoundError:沒有名為‘chardet’的模塊”是怎么回事?

    我在 M1 mac 上使用 ESP-IDF 時(shí)遇到問題。我已經(jīng)嘗試了我發(fā)現(xiàn)的一切來解決它,但顯然,我沒有運(yùn)氣。癥結(jié)在于缺少“chardet”python 模塊。我讀到的所有涉及缺少“chardet
    發(fā)表于 04-13 07:16

    Linux上安裝Oracle 11g數(shù)據(jù)庫(kù)

    Linux上安裝Oracle 11g數(shù)據(jù)庫(kù)
    發(fā)表于 09-07 09:14 ?3次下載
    Linux上<b class='flag-5'>安裝</b>Oracle 11g數(shù)據(jù)<b class='flag-5'>庫(kù)</b>

    04 USB庫(kù)介紹

    04 USB庫(kù)介紹
    發(fā)表于 10-11 09:26 ?4次下載
    04 USB<b class='flag-5'>庫(kù)</b><b class='flag-5'>介紹</b>

    Stellaris軟件庫(kù)安裝,特性介紹和資源說明詳細(xì)中文概述

    本文的主要內(nèi)容介紹的是Stellaris軟件庫(kù)安裝,特性介紹和資源說明詳細(xì)中文概述
    發(fā)表于 05-09 11:20 ?5次下載
    Stellaris軟件<b class='flag-5'>庫(kù)</b>的<b class='flag-5'>安裝</b>,特性<b class='flag-5'>介紹</b>和資源說明詳細(xì)中文概述

    介紹USB IP庫(kù)是什么?

    USB IP庫(kù)介紹(上)
    的頭像 發(fā)表于 07-05 00:13 ?6305次閱讀
    <b class='flag-5'>介紹</b>USB IP<b class='flag-5'>庫(kù)</b>是什么?

    如何在計(jì)算機(jī)上安裝Arduino庫(kù)

    Arduino庫(kù)是共享代碼的便捷方法,例如設(shè)備驅(qū)動(dòng)程序或常用的實(shí)用程序功能。本指南詳細(xì)介紹了如何在計(jì)算機(jī)上安裝庫(kù)。有關(guān)Arduino庫(kù)及其使
    的頭像 發(fā)表于 11-27 09:42 ?6688次閱讀
    如何在計(jì)算機(jī)上<b class='flag-5'>安裝</b>Arduino<b class='flag-5'>庫(kù)</b>

    在Arduino IED中安裝TimeOne庫(kù)文件

    在Arduino IED中安裝TimeOne庫(kù)文件
    發(fā)表于 04-25 09:45 ?4次下載

    安裝TI_MSP432庫(kù)和導(dǎo)入CCS工程

    安裝TI_MSP432庫(kù)和導(dǎo)入CCS工程
    發(fā)表于 12-05 13:36 ?10次下載
    <b class='flag-5'>安裝</b>TI_MSP432<b class='flag-5'>庫(kù)</b>和導(dǎo)入CCS工程

    Chardet通用字符編碼檢測(cè)器

    ./oschina_soft/chardet.zip
    發(fā)表于 05-24 10:40 ?1次下載
    <b class='flag-5'>Chardet</b>通用字符編碼檢測(cè)器

    如何安裝常用Python庫(kù)

    使用常用的Python庫(kù)是非常重要的一步。本文將介紹如何安裝常用的Python庫(kù),以幫助您在Python開發(fā)中更加高效地進(jìn)行編程。
    的頭像 發(fā)表于 04-14 12:11 ?1023次閱讀

    如何安裝Python圖像處理PIL庫(kù)

    安裝PIL庫(kù) 要使用PIL庫(kù),我們首先需要安裝它。有兩種方法可以安裝PIL庫(kù): 方法一:使用pi
    的頭像 發(fā)表于 09-12 17:15 ?2435次閱讀
    如何<b class='flag-5'>安裝</b>Python圖像處理PIL<b class='flag-5'>庫(kù)</b>