兩種方法獲取網頁編碼python版

ybw8 9年前發布 | 24K 次閱讀 Python開發 Python

在web開發的時候我們經常會遇到網頁抓取和分析,各種語言都可以完成這個功能。我喜歡用python實現,因為python提供了很多成熟的模塊,可以...

在web開發的時候我們經常會遇到網頁抓取和分析,各種語言都可以完成這個功能。我喜歡用python實現,因為python提供了很多成熟的模塊,可以很方便的實現網頁抓取。

但是在抓取過程中會遇到編碼的問題,那今天我們來看一下如何判斷網頁的編碼:

網上很多網頁的編碼格式都不一樣,大體上是GBK,GB2312,UTF-8等。

我們在獲取網頁的的數據后,先要對網頁的編碼進行判斷,才能把抓取的內容的編碼統一轉換為我們能夠處理的編碼,避免亂碼問題的出現。


下面介紹兩種判斷網頁編碼的方法

方法一:使用urllib模塊的getparam方法

import urllib

fopen1 = urllib.urlopen(')

fopen2 = urllib.urlopen(')

print fopen1.getparam('charset')# baidu

print fopen2.getparam('charset')# pythontab</pre>


執行結果為:

gbk

None


PS: 呵呵,其實,上面的獲取的編碼都是不正確的,我們可以自己打開網頁查看源代碼,發現baidu的是gb2312,而pythontab是utf-8。唉,這個方法確實有點坑爹啊。檢測不準確、檢測不到,它都占了,所以很不靠譜,下面介紹一個靠譜的方法。


方法二:使用chardet模塊

#如果你的python沒有安裝chardet模塊,你需要首先安裝一下chardet判斷編碼的模塊哦
import chardet 
import urllib

先獲取網頁內容

data = urllib.urlopen(')

用chardet進行內容分析

chardit = chardet.detect(data)

data1 = urllib.urlopen(')

chardit1 = chardet.detect(data1)

print chardit['encoding'] # pythontab

print chardit1['encoding'] # baidu</pre>


執行結果為:

utf-8

gb2312


這兩個結果都是正確的哦,各位可以去親自驗證一下~~


總結:第二個方法很準確,在網頁編碼分析的時候用python模塊分析內容是最準確的,而使用分析meta頭信息的方法是不太準確的。


</div>

 本文由用戶 ybw8 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!