Python——系統(tǒng)編碼問(wèn)題

python在安裝時(shí),默認(rèn)的編碼是ascii。經(jīng)常出現(xiàn)它無(wú)法處理非ascii編碼的情況。此時(shí)需要手動(dòng)修改它的編碼字符集。

我們可以使用IDLE查詢(xún)系統(tǒng)默認(rèn)編碼:


>>>import sys

>>>sys.getdefaultencoding()

修改默認(rèn)編碼,可以使用sys的setdefaultencoding方法


>>>import sys

>>>sys.getdefaultencoding()

>>>reload(sys)

>>>sys.setdefaultencoding('utf8)

記得要加載了sys模塊才能進(jìn)行set操作,否則會(huì)報(bào)錯(cuò),就像上面那樣。還有一個(gè)問(wèn)題就是,關(guān)閉IDLE和CMD的時(shí)候,默認(rèn)編碼又變回ASCII。如果想把系統(tǒng)默認(rèn)編碼永久設(shè)置為utf-8,需要在Python安裝目錄的Lib\site-packages文件夾下創(chuàng)建一個(gè)sitecustomize.py,內(nèi)容設(shè)置為:

#encoding = utf8

import sys

reload(sys)

sys.setdedaultencoding('utf8')

所以,我建議一般寫(xiě)程序時(shí)候在源程序頭上加上上面的代碼,就能解決默認(rèn)編碼問(wèn)題。不然會(huì)出現(xiàn)下面的錯(cuò)誤,這是我寫(xiě)爬蟲(chóng)的時(shí)候報(bào)的錯(cuò)誤,當(dāng)加上上面的代碼就解決了。format內(nèi)的u[0],u[1],u[2]是使用beautifulsoup庫(kù)獲取的內(nèi)容,而beautifulsoup會(huì)自動(dòng)把html文件解析成utf-8編碼格式,而系統(tǒng)默認(rèn)編碼是ASCII,所以會(huì)報(bào)錯(cuò),當(dāng)修改系統(tǒng)編碼為utf-8時(shí),就解決了該問(wèn)題。





下面附上我爬取中國(guó)大學(xué)排名網(wǎng)站的定向爬取代碼:

# -*- coding: utf-8 -*-

importrequests

frombs4importBeautifulSoup

importbs4

importre

importsys

reload(sys)

sys.setdefaultencoding('utf8')

defgetHTMLText(url):

try:

r = requests.get(url,timeout=30)

r.raise_for_status()

r.encoding = r.apparent_encoding

returnr.text

except:

return""

deffillUnivList(ulist,html):

soup = BeautifulSoup(html,"html.parser")

fortrinsoup.find('tbody').children:

ifisinstance(tr,bs4.element.Tag):

tds = tr.find_all('td')

(.*?)

ulist.append([str_rank,tds[1].string,tds[3].string])

defprintUnivList(ulist,num):

print("{:^10}\t{:^6}\t{:^10}".format("排名","學(xué)校名稱(chēng)","總分"))

foriinrange(num):

u = ulist[i]

print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))

print("Suc"+str(num))

defmain():

uinfo = []

url ="http://www.zuihaodaxue.cn/zuihaodaxuepaiming2017.html"

html = getHTMLText(url)

fillUnivList(uinfo,html)

printUnivList(uinfo,20)#20 univs

if__name__ =='__main__':

main()

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容