天天看點

關于Python的requests中text中文亂碼的問題

今天學習python爬蟲是遇到了字元編碼的問題

target = 'http://www.biqukan.com/1_1094/5403177.html'
req = requests.get(url=target)
print req.text
           

列印出來的中文都是亂碼,現在說一下解決方案。

首先要明确的是,req.text傳回的是unicode,也就是說無法再decode,是以網上那些先decode再encode的方法是沒法使用的,這種方法适用的是req.content。

通過檢視網站源碼,發現網站使用的charset是gbk,Requests 會自動解碼來自伺服器的内容。大多數 unicode 字元集都能被無縫地解碼。請求發出後,Requests 會基于 HTTP 頭部對響應的編碼作出有根據的推測。當你通路 r.text 之時,Requests 會使用其推測的文本編碼。你可以找出 Requests 使用了什麼編碼,并且能夠使用 r.encoding 屬性來改變它,我認為requests對編碼做出了錯誤的判斷,是以進行了下面的設定:

req.encoding='gbk'
           

注意,這裡的gbk是因為網頁使用的是gbk。

然後再對text進行編碼

text = req.text
print text.encode('utf-8')
           

就能正确的列印出中文了

完整的代碼如下:

# coding: UTF-8
import requests

if __name__ == '__main__':
    target = 'http://www.biqukan.com/1_1094/5403177.html'
    req = requests.get(url=target)
    req.encoding='gbk'
    # content = req.content.decode('gbk').encode('utf-8')
    # print content
    text = req.text
    print(isinstance(text, unicode))
    print text.encode('utf-8')
           

繼續閱讀