Python requests在作為代理爬蟲節(jié)點抓取不同字符集網(wǎng)址的時候會遇到一些編碼的問題炊汤,通過查找資料將自己理解的內(nèi)容總結(jié)以下:
1晴音、編碼和解碼
編碼:unicode——str(encode())
eg:str2.encode('utf-8')表示將unicode字符串str2轉(zhuǎn)換成用utf-8格式編碼的字符串
解碼:str——unicode(decode())
eg:str1.decode('gb2312'):表示將gb2312編碼的字符串str1解碼成unicode
2、requests的text()和requests的content()的區(qū)別
requests在獲取網(wǎng)絡(luò)資源后,可以通過兩種模式查看內(nèi)容型豁,一個是r.text,一個是r.content尚蝌。
r.text返回的是處理過的Unicode型的數(shù)據(jù)(根據(jù)設(shè)置的encoding來解碼)
r.content:返回的是bytes型的原始數(shù)據(jù)迎变。也就是說,r.content相對于r.text來說節(jié)省了計算機資源飘言,r.content 是把內(nèi)容bytes返回衣形,而r.text是decode成unicode。(返回的內(nèi)容是二進制內(nèi)容)
3姿鸿、r.encoding和r.apparent_encoding的區(qū)別
r.encoding:從HTTP header中猜測的響應(yīng)內(nèi)容編碼方式谆吴,如果header中存在charset字段,說明訪問的服務(wù)器對它的資源的編碼方式是有要求的苛预,可以使用r.encoding來獲取句狼。
r.apparent_encoding:根據(jù)網(wǎng)頁內(nèi)容分析出的編碼方式。如果header中不存在charset字段热某,則認為默認編碼為ISO-8859-1腻菇,但是這個編碼不能解析中文,因此可以用r.apparent_encoding來解碼昔馋。
4筹吐、requests獲取編碼的方式
get_encoding_from_content:d
get_encoding_from_headers
chardet.detect