Python是個(gè)好工具,但是也有其固有的一些缺點(diǎn)。最近在學(xué)習(xí)網(wǎng)頁(yè)爬蟲(chóng)時(shí)就遇到了這樣一種問(wèn)題,中文網(wǎng)站爬取下來(lái)的內(nèi)容往往中文顯示亂碼??催^(guò)我之前博客的同學(xué)可能知道,之前爬取的一個(gè)學(xué)校網(wǎng)頁(yè)就出現(xiàn)了這個(gè)問(wèn)題,但是當(dāng)時(shí)并沒(méi)有解決,這著實(shí)成了我一個(gè)心病。這不,剛剛一解決就將這個(gè)方法公布與眾,大家一同分享。
首先,我說(shuō)一下Python中文亂碼的原因,Python中文亂碼是由于Python在解析網(wǎng)頁(yè)時(shí)默認(rèn)用Unicode去解析,而大多數(shù)網(wǎng)站是utf-8格式的,并且解析出來(lái)之后,python竟然再以Unicode字符格式輸出,會(huì)與系統(tǒng)編碼格式不同,導(dǎo)致中文輸出亂碼,知道原因后我們就好解決了。下面上代碼,實(shí)驗(yàn)對(duì)象仍是被人上了無(wú)數(shù)遍的百度主頁(yè)~
# -*- coding: utf-8 -*- import urllib2 import re import requests import sys import urllib #設(shè)置編碼 reload(sys) sys.setdefaultencoding('utf-8') #獲得系統(tǒng)編碼格式 type = sys.getfilesystemencoding() r = urllib.urlopen("http://www.baidu.com") #將網(wǎng)頁(yè)以u(píng)tf-8格式解析然后轉(zhuǎn)換為系統(tǒng)默認(rèn)格式 a = r.read().decode('utf-8').encode(type) print a