今天學習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')