Python爬蟲之必備chardet庫

2022-09-25 19:24:13 字數 1698 閱讀 1504

玩兒過爬蟲的朋友應該知道,在爬取不同的網頁時,返回結果會出現亂碼的情況。比如,在爬取某個中文網頁的時候,有的頁面使用gbk/gb2312,有的使用utf8,如果你需要去爬一些頁面,知道網頁編碼很重要的。

雖然html頁面有charset標籤,但是有些時候是不對的,那麼chardet就能幫我們大忙了。使用 chardet 可以很方便的實現字串/檔案的編碼檢測。

如果你安裝過anaconda,那麼可以直接使用chardet庫。如果你只是安裝了python的話,就需要使用下面幾行**,完成chardet庫的安裝。

pip install chardet

接著,使用下面這行**,匯入chardet庫。

import chardet

這個小節,我們分3部分講解。

detect()函式接受乙個引數,乙個非unicode字串。它返回乙個字典,其中包含自動檢測到的字元編碼和從0到1的可信度級別。

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

檢測gbk編碼的中文:

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

chardet.detect(str1)

chardet.detect(str1)["encoding"]

結果如下:

檢測的編碼是gb2312,注意到gbk是gb2312的父集,兩者是同一種編碼,檢測正確的概率是99%,language欄位指出的語言是'chinese'。

檢測utf-8編碼的中文:

程式設計客棧

str2 = '我有mljki乙個夢想'.encode('utf-8')

chardet.detect(str2)

chardet.detect(str2)["encoding"]

結果如下:

檢測一段日文:

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

chardet.detect(str3)

chardet.detect(str3)

結果如下:

我們以百度網頁為例子,進行講述。

這個網頁的源**,使用的是什麼編碼呢?我們看看源**:

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

如果不使用chardet庫,獲取網頁源**的時候,怎麼指定字元編碼呢?

import chardet

import requests

headers =

response = requests.get('',headers=headers)

response.encoding = "utf-8"

response.text

結果如下:

你會發現:正確指定編碼後,沒有亂碼。如果你將編碼改為gbk,再看看結果。此時已經亂碼。

如果使用chardet庫,獲取網頁源**的時候,可以輕鬆指定字元編碼!

import chardet

import requests

headers =

response = requests.get('',headers=headers)

# 注意下面這行**,是怎麼寫的?

response.encoding = chardet.detect(response.content)['encoding']

response.text

結果如下:

編碼不用我們自己查詢,也不用猜,直接交給chardet庫去猜測,正確率還高。

Python之必備函式

匿名函式 anonymous function 是指一類無需定義識別符號 函式名 的函式。通俗來講,就是它可以讓我們的函式,可以不需要函式名。正常情況下,我們定義乙個函式,使用的是def關鍵字,而當你學會使用匿名函式後,替代def的是lambda。下面就def和lambda分別舉例說明 def my...

Python爬蟲之爬蟲概述

知識點 模擬瀏覽器,傳送請求,獲取響應 網路爬蟲 又被稱為網頁蜘蛛,網路機械人 就是模擬客戶端 主要指瀏覽器 傳送網路請求,接收請求響應,一種按照一定的規則,自動地抓取網際網路資訊的程式。知識點 了解 爬蟲的概念 爬蟲在網際網路世界中有很多的作用,比如 資料採集 抓取招聘 的招聘資訊 資料分析 挖掘...

Python爬蟲入門級 1 爬蟲程式必備模組

乙個簡單的爬蟲程式所必備的模組 一 爬蟲排程器 對整個爬蟲過程的開啟,服務以及停止進行管理和把控 二 爬蟲器 爬蟲程式的主體部分,屬於核心元件。主要分為三大塊 1 url管理器 對將要爬取的url和已經爬取得url進行管理,主要作用就是防止反覆爬取以及迴圈爬取。實現方式 記憶體 python的set...