以下是小白的爬蟲學習歷程中遇到並解決的一些困難,希望寫出來給後來人,如有疏漏懇請大牛指正,不勝感謝! 首先,我的代碼是這樣的 1 2 3 import requests 4 5 url = 'http://www.acfun.tv/' 6 html = requests.get(url) 7 8 p
以下是小白的爬蟲學習歷程中遇到並解決的一些困難,希望寫出來給後來人,如有疏漏懇請大牛指正,不勝感謝!
首先,我的代碼是這樣的
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.解決方法
原文中在貼了含有真正解決方法的網頁的網址,http://www.crifan.com/summary_python_2_x_common_string_encode_decode_error_reason_and_solution/
而我怎麼都打不開。
我最終辦法就是使用Pycharm這個IDE來運行查看結果,中文部分就能正常顯示了。
至於如何在cmd上解決print的問題我仍然不知道如何解決。
寫入文件時引發的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)