解決Python2.7的UnicodeEncodeError: ‘ascii’ codec can’t encode異常錯誤

今天在看中國大學MOOC好大學在線中Python網絡爬蟲與信息提取課程的時候,做了一個實例是關於中國大學排名定向爬蟲,我貼一下代碼:

#encoding:utf-8
import requests
from bs4 import BeautifulSoup
import bs4

def getHTMLText(url):
    r = requests.get(url,timeout = 30)
    r.raise_for_status()
    r.encoding = r.apparent_encoding
    return r.text


def fillUnivList(ulist,html):
    soup = BeautifulSoup(html,"html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr,bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].string,tds[1].string,tds[2].string])

def printUnivList(ulist,num):
    print("{:^10}\t{:^6}\t{:^10}".format("排名","學校名稱","總分"))
    for i in range(num):
        u=ulist[i]
        print("{:^10}\t{:^6}\t{:^10}".format(u[0],u[1],u[2]))



def main():
    uinfo =[]
    url ='http://www.zuihaodaxue.com/zuihaodaxuepaiming2017.html'
    html = getHTMLText(url)
    fillUnivList(uinfo,html)
    printUnivList(uinfo,20)

main()

但是我在最後在運行的時候出現了
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 1-4: ordinal not in range(128)
找了一下原因,因爲Python調用ascii編碼解碼程序去處理字符流,當字符流不屬於ascii範圍內,就會拋出異常(ordinal not in range(128)),但是很神奇的是python3.x是不會出現這個問題的,好吧,說好的python更加穩定呢?

那就找解決方法吧!
解決的方案很簡單,修改默認的編碼模式,我們可以通過sys.setdefaultencoding(‘utf-8’)來將當前的字符處理模式修改爲utf-8編碼模式,值得注意的是,如果單純這麼調用的話,Python會拋出一個AttributeError異常:需要調用一次reload(sys)。

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

然後,就ok了。
這位大神的解決方案

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章