在web開發的時候咱們常常會遇到網頁抓取和分析,各類語言均可以完成這個功能。我喜歡用python實現,由於python提供了不少成熟的模塊,能夠很方便的實現網頁抓取。
可是在抓取過程當中會遇到編碼的問題,那今天咱們來看一下如何判斷網頁的編碼:
網上不少網頁的編碼格式都不同,大致上是GBK,GB2312,UTF-8等。
咱們在獲取網頁的的數據後,先要對網頁的編碼進行判斷,才能把抓取的內容的編碼統一轉換爲咱們可以處理的編碼,避免亂碼問題的出現。html
下面介紹兩種判斷網頁編碼的方法:python
方法一:使用urllib模塊的getparam方法web
1 import urllib 2 #autor:pythontab.com 3 fopen1 = urllib.urlopen('http://www.baidu.com').info() 4 print fopen1.getparam('charset')# baidu
執行結果爲:編碼
gbkurl
呵呵,其實,上面的獲取的編碼都是不正確的,咱們能夠本身打開網頁查看源代碼,發現baidu的是gb2312。唉,這個方法確實有點坑爹啊。檢測不許確、檢測不到,它都佔了,因此很不靠譜,下面介紹一個靠譜的方法。spa
方法二:使用chardet模塊code
1 #若是你的python沒有安裝chardet模塊,你須要首先安裝一下chardet判斷編碼的模塊哦 2 #author:pythontab.com 3 import chardet 4 import urllib 5 #先獲取網頁內容 6 data1 = urllib.urlopen('http://www.baidu.com').read() 7 #用chardet進行內容分析 8 chardit1 = chardet.detect(data1) 9 10 print chardit1['encoding'] # baidu
執行結果爲:htm
gb2312blog
這個結果都是正確的哦,各位能夠去親自驗證一下~~開發
總結:第二個方法很準確,在網頁編碼分析的時候用python模塊分析內容是最準確的,而使用分析meta頭信息的方法是不太準確的。