美文网首页
Python——系统编码问题

Python——系统编码问题

作者: 帅气的_xiang | 来源:发表于2017-03-15 14:07 被阅读125次

    python在安装时,默认的编码是ascii。经常出现它无法处理非ascii编码的情况。此时需要手动修改它的编码字符集。

    我们可以使用IDLE查询系统默认编码:

    >>>import sys

    >>>sys.getdefaultencoding()

    修改默认编码,可以使用sys的setdefaultencoding方法

    >>>import sys

    >>>sys.getdefaultencoding()

    >>>reload(sys)

    >>>sys.setdefaultencoding('utf8)

    记得要加载了sys模块才能进行set操作,否则会报错,就像上面那样。还有一个问题就是,关闭IDLE和CMD的时候,默认编码又变回ASCII。如果想把系统默认编码永久设置为utf-8,需要在Python安装目录的Lib\site-packages文件夹下创建一个sitecustomize.py,内容设置为:

    #encoding = utf8

    import sys

    reload(sys)

    sys.setdedaultencoding('utf8')

    所以,我建议一般写程序时候在源程序头上加上上面的代码,就能解决默认编码问题。不然会出现下面的错误,这是我写爬虫的时候报的错误,当加上上面的代码就解决了。format内的u[0],u[1],u[2]是使用beautifulsoup库获取的内容,而beautifulsoup会自动把html文件解析成utf-8编码格式,而系统默认编码是ASCII,所以会报错,当修改系统编码为utf-8时,就解决了该问题。

    下面附上我爬取中国大学排名网站的定向爬取代码:

    # -*- 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("排名","学校名称","总分"))

    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()

    相关文章

      网友评论

          本文标题:Python——系统编码问题

          本文链接:https://www.haomeiwen.com/subject/flplnttx.html