爬蟲爬取資料時各種中文亂碼問題
學爬蟲有一段時間了,期間總是覺得內容編碼會傻傻分不清楚,尤其是直接網頁拿資料的時候,遇見中文有時候特別麻煩,看大神介紹的東西太多,只記下了處理方式,僅供參考,不對地方歡迎大家指正~~
一般請求返回內容編碼方式步驟如下:
1、檢視資料來源網頁的編碼形式--爬取資料所在網頁原始碼就有寫:
2、編碼解析:
respond.decode(請求返回的編碼格式).encode(Python預設的utf-8)
筆記中其他大神這樣教,實踐中大多情況我都用:respond.encode(Python預設的utf-8).decode(請求返回的編碼格式)
爬取網頁內容正常編譯,無報錯,英文均顯示正常,中文亂碼
最近爬取免費取名網站時候,遇見爬下來的編碼正確編碼後無報錯,英文均顯示正常,但是中文奇奇怪怪亂碼情況如下圖,網頁編碼兩種情況遇見解析後如此,處理方法如下,
第一種:網頁編碼為gb2312 (requests的get方式獲取資料)
原來處理方式(出現上圖亂碼),響應內容=respond.text.encode('utf-8').decode('gb2312')×
改進處理方式: ① respond.content.decode('gb18030','ignore') ---親試遇見中文響應內容解析還是用這種方式好
② respond.content.decode('gbk','ignore')
#使用gbk2312出現報錯'gbk' codec can't encode character '\u30fb' in position 12530: illegal multibyte sequence~ 這是一個很尷尬的問題,第二種第一次處理也報錯,後面又可以了~~~
總結:遇見中文編碼decode裡面,'gbk'/'gbk2312'/'gb18030' (備用繁體編碼選項沒用過,可以留用'big5'/'big5hkscs')總有一款適合你 實在不行看下面↓↓↓
第二種:網頁編碼為utf-8 (requests的get方式獲取資料)
嘗試了上面n中組合形式,就是頑固的不行,終於借鑑了一些大神的方法解決掉了,decode('utf-8')確定無疑。
解決亂碼:在程式碼之前新增預設設定編碼格式
sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')
url = 'https://www.yw11.com/html/qiming/xuename/2009/0929/273.html'
urlcontent = requests.get(url).content.decode('utf-8')
轉自:https://blog.csdn.net/u010924297/article/details/80353440