requests庫獲取網頁後,print中文會出現亂碼,最簡單的辦法是根據網頁編碼設置encodingpython
import requests r = requests.get('https://www.baidu.com') r.encoding='utf-8' # 根據網頁編碼設置 print(r.text)
這種方式能夠達成目標,可是不夠智能。其實,requests庫包含了幾個有用的函數,能夠獲取網頁的編碼app
一、requests.utils.get_encoding_from_headers函數能夠根據響應頭獲取網頁編碼函數
import requests r = requests.get('https://www.baidu.com') r.encoding=requests.utils.get_encoding_from_headers(r.headers) print(r.text)
二、requests.utils.get_encodings_from_content函數能夠根據網頁內容獲取編碼編碼
import requests r = requests.get('https://www.baidu.com') r.encoding=requests.utils.get_encodings_from_content(r.text) # 注意get_encodings_from_content的參數是字符串,因此要用r.text而不是r.content print(r.text)
三、response.apparent_encoding 自動識別文本編碼(推薦使用)spa
import requests r = requests.get('https://www.baidu.com') r.encoding=r.apparent_encoding print(r.text)
注:一般獲取正常的網頁後使用以上三個函數任意一個均可以正常完成任務。可是也存在獲取的編碼與網頁實際編碼不符合的狀況,要根據狀況靈活使用。code
意外狀況:utf-8
有時候網頁編碼是gb2312,而顯示中仍是有個別文字是亂碼,例如我曾經遇到「楽」就亂碼了,解決辦法是,設置編碼爲gbk或者gb18030,編碼內容上gb18030 > gbk > gb2312,若是內容中有繁體或者少數民族文字時,考慮使用gbk和個gb18030。字符串