玩兒過爬蟲的朋友應該知道,在爬取不同的網頁時,返回結果會出現亂碼的情況。比如,在爬取某個中文網頁的時候,有的頁面使用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...