以下是小白的爬蟲學習歷程中遇到並解決的一些困難,希望寫出來給后來人,如有疏漏懇請大牛指正,不勝感謝!
首先,我的代碼是這樣的
1 2 3 import requests 4 5 url = 'http://www.acfun.tv/' 6 html = requests.get(url) 7 8 print(html.text)
python2中解決方法(題外話)
參考:http://www.cnblogs.com/zhaoyl/p/3770340.html
在前面加上以下代碼即可
import sys reload(sys) # Python2.5 初始化后會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入 sys.setdefaultencoding('utf-8')
一般就能解決了
而在Python3中:
如果在控制台中運行,就遇到了如下的UnicodeEncodeError:
1.原因
#參考了http://www.tuicool.com/articles/nEjiEv
首先,代碼中的html.text會自動將獲取的內容解析為unicode (與html.content不同。兩者區別就是html.content的類型是bytes,而html.text類型是str,bytes通過解碼(decode)可以得到str,str通過編碼(encode)得到bytes) html.text這種字符串如果要輸出應當用utf-8來編碼。而cmd中,(對於多數中國人所用的是中文的系統)默認字符編碼是gbk
從而導致此種現象:
python要將utf-8編碼的字符串,在gbk的cmd的中打印出來。於是出現了編碼錯誤
2.解決方法
1. 運行CMD;
2. 輸入 CHCP,回車查看當前的編碼;
3. 輸入CHCP 65001(序號65001代表utf-8),回車;
4. 僅如此,還是不能支持UTF8的正常顯示,你還要在窗體上右鍵,選擇屬性,來設置字體;
5. 操作完上面幾步后,即使你原來的字體里面沒有顯示Lucida Console這個字體,現在應該也能看到了。選擇它。如果原來就有,可以選上它先試試,不行在執行上述步驟。
(參考http://blog.useasp.net/archive/2012/04/24/how_to_use_UTF8_encoding_in_Windows_CMD.aspx)
如果還是不懂,請自行百度:在cmd上顯示utf-8。
你也可以使用Pycharm這個IDE來運行查看結果,中文部分就能正常顯示了。
寫入文件時引發的UnicodeEncodeError:
參考:https://segmentfault.com/a/1190000004269037
在測試過程中多次出現在寫入文件時報告錯誤“UnicodeEncodeError: 'ascii' codec can't encode character '\u56de' in position 0: ordinal not in range(128)”,這是由於我們在抓取網頁的時候采用的是UTF-8編碼,而存儲時沒有指定編碼,在存儲到文件的過程中就會報錯。
解決辦法為:
在讀取文件時加入指定UTF-8編碼的選項
f = open('content.txt','a',encoding='UTF-8')
另外需要注意的是使用requests獲取到網頁之后同樣要指定編碼
html = requests.get(url) html = re.sub(r'charset=(/w*)', 'charset=UTF-8', html.text)