Python爬蟲|Windows編碼的一個暗坑
一個道歉:
很抱歉可能在最近一個月之內我們的專欄更新速度都會非常慢,等我們進度趕完了繼續更新,懇請大家原諒。
--------
我的學弟在學習@xlzd 的爬蟲第三講( http:// xlzd.me/2015/12/21/pyth on-crawler-06
)的時候遇到了無法解決的編碼問題,幾天都沒有解決。最后我試驗了幾次以后才找到原因。這篇專欄作為一個note記錄一下這個問題。之后會有專門的專欄講坑爹的Python的編碼問題,特別是Windows下的暗坑。
原博客相關代碼如下:
import codecs
def main():
url = DOWNLOAD_URL
with codecs.open('movies', 'wb', encoding='utf-8') as fp:
while url:
html = download_page(url)
movies, url = parse_html(html)
fp.write(u'{movies}\n'.format(movies='\n'.join(movies)))
如果換成print,就會報編碼錯誤。很多初學者都容易被Windows下這個暗坑坑住。這里的主要原因是,Windows下對中文的編碼默認是GBK。明白了這個坑,我們就可以對應設計解決方案了。處理方法有幾種:
1. 對需要輸出的內容編碼。
如果直接輸出:
print title
結果如下:
這里我們改為
print title.encode('gb18030')
這里我們使用gb18030的原因是,這個編碼可以兼容所有gb系列的編碼,可以有效地避免少部分GBK無法解碼的內容。
結果如下:
可以看到確實不會報錯了,但是還是有一些無法編碼的內容。沒有辦法,這是GB系列的坑。
如果用UTF-8編碼:
print title.encode('utf-8')
則會出現如下慘狀:
2. 不使用cmd,用IDE的控制臺輸出。
不過這里需要注意一點,如果IDE默認的編碼是GBK(比如我的Eclipse沒有修改之前),那么會出現上面同樣的情況。這里處理方式很簡單,修改IDE的默認編碼設置就OK了。比如Eclipse,Windows->Preferences->Workspace:
Text file encoding 修改成UTF-8就好了。修改之后文件寫入的問題也順便解決了。
PS:一開始以為是Windows下寫入文件也會有同樣的編碼問題,在我重新設置了重裝的Eclipse的Text file encoding之后就不會有問題了。cmd下直接運行無論哪種編碼都是可以正常寫入文件的,用Notepad++也可以正常讀出文件內容。
----------
更多項目介紹,請關注我們的項目專欄: China's Prices Project - 知乎專欄
項目聯系方式:
- 項目郵箱(@iGuo 的郵箱):zhangguocpp@163.com
- 申請加入項目,請聯系CHO@Suri :liuxiaomancpp@163.com
- 知乎:@iGuo(CEO)@Suri(COO&CHO,Human)@林行健@Dementia (CTO)@張土不 (CFO)@張一(CRO,Research)
來自:https://zhuanlan.zhihu.com/p/22094199