用python寫爬蟲,很多時候我們會先在cmd下先進行嘗試。
運作爬蟲之後,肯定的,我們想看看爬取的結果。
于是,我們print...
運氣好的話,一切順利。但這樣的次數不多,更多地,我們會遇到這樣的錯誤:
好吧,回去檢查網頁的編碼格式:<code>gb2312</code>
代碼中也添加了:<code>r.encoding = 'gb2312'</code>
看不出哪裡出了問題,應該沒問題的啊!
代碼如下:
網上查,都說是cmd控制台的問題。預設控制台編碼gbk
好吧,那就改一下控制台編碼,改成gbk的超集gb18030
試試看再說。。。嗯,很好,無報錯,但是有亂碼,算是解決了問題!
順着這個思路,再一想,改控制台編碼那還不如直接改字元編碼:<code>r.encoding = 'gb18030'</code>
試試看再說。哎,沒問題了,無報錯,無亂碼,完美解決!
從ASCII、GB2312、GBK到GB18030,這些編碼方法是向下相容的,即同一個字元在這些方案中總是有相同的編碼,後面的标準支援更多的字元。
各種編碼字元數目
gb2312: 7445 -- 在windows中的代碼頁是CP936
gbk: 21886 -- 在windows中的代碼頁是CP936
gb18030: 27484 -- 在windows中的代碼頁是CP54936
gb13000: 等同于unicode
顯然,gb18030 是 gb2312,gbk 的超集
是以,解決問題的思路就是:
如果控制台中,列印中文文本出問題,那就用它的編碼的超集進行編碼。