Python輸出豆瓣個人主頁源代碼出現編碼錯誤?
小弟最近在學Python,試著獲取網頁源碼並輸出。
目標網頁:宋樂天用瀏覽器查看網頁源碼,編碼是utf-8:
代碼如下,Python 版本是3.5:
&
import urllib.request
url = r"http://www.douban.com/people/songlet/" # 宋樂天的主頁
response = urllib.request.urlopen(url)
html = response.read().decode("utf-8")
print(html)
命令行運行後,錯誤提示如下:
把print(html)注釋掉就不會報錯,不知道是哪裡不對
Traceback (most recent call last):
File "F:PythonWorkspaceDouban-Album-Download .py", line 6, in &
print(html)
UnicodeEncodeError: "gbk" codec can"t encode character "u30fb" in position 50763: illegal multibyte sequence
py3里的str類型都是utf8,你用的是windows,終端是gbk的,print的時候會將utf8解碼輸出。但是utf8覆蓋全unicode集,而gbk只能覆蓋部分unicode字符集,而頁面里有不能編碼為gbk(也就是gbk中不包含)的utf8字元,因此encode失敗。
u30fb如果沒記錯,應該是個全形的中間位置的小圓點。import sysreload(sys)
sys.setdefaultencoding("utf-8")
自問自答一下,總算找到解決辦法了。原理如 @Coldwings 所述。解決方法是在輸出的時候轉碼為gbk,捨棄不存在的字元。 Python 3 可用:
print(message.encode("gbk", errors = "ignore").decode("gbk"))
這個問題我遇到過。。在終端下切換字符集可以 chcp 65001
應該是你的print輸出的字元出錯了。 換成其他的格式就行了。
一般搞爬蟲的都會遇到這個問題。
你好,非常感謝你自己的回復。我也碰到一樣的問題,是twitter的網頁,但是print是編碼錯誤,按照你說的print(x.encode("gbk",error="ignore")).decode("gbk"))確實能列印了,但是很無奈的是明明有17萬行,它只列印了最後1800多行。按理解豈不是前面17萬多都有不能編碼成gbk的utf-8碼,然後既然這樣,我想問一下,如果我只是read的話,不print他,那能read到所有17萬行源代碼嗎?如果看到,請您指教,確實著急,謝謝
推薦閱讀:
※如何應對網站反爬蟲策略?如何高效地爬大量數據?
※如何爬取伺服器日誌log和資料庫?
※當爬蟲不遵守 robots 協議時,有沒有防止抓取的可能?
※網路搜索引擎為什麼又要叫爬蟲?