python2.7爬蟲中decode("utf-8")出錯該如何解決?
12-29
代碼如下:
# -*- coding: utf-8 -*-import urllib2,urllibmyUrl = "http://qiushibaike.com/hot/page/1"
user_agent = "Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)" headers = { "User-Agent" : user_agent } req = urllib2.Request(myUrl, headers = headers)myResponse = urllib2.urlopen(req)
myPage = myResponse.read() #decode的作用是將其他編碼的字元串轉換成unicode編碼 unicodePage = myPage.decode("utf-8")運行的時候出錯:UnicodeDecodeError: "utf8" codec can"t decode byte 0xb6 in position 61307: invalid start byte
請問出錯的原因是什麼?該怎麼解決?
神tm注釋……
decode不是編碼轉換,decode是把一個無編碼的str,依照給入的參數為解碼系統,解碼後映射到unicode字符集,返回為unicode對象……
出錯的原因正是因為國內網站熱衷於瞎搞,於是一個頁面里混了多種編碼。如果不是關鍵內容,解不出來就ignore也是可以的。瀏覽器的解碼部分通常有個fallback,對utf8解不出來的字元嘗試使用本地locale,同樣的東西你也可以試試,自己擴展個decoder就好。
——————————
順帶,那些說py3的,如果多種編碼混一起,py3比2麻煩好幾倍。
返回的文本當中有utf-8中的非法字元,這不是你的問題,是對方網頁的問題。爬蟲抓取經常會遇到類似這樣的情況,你永遠不能假設對方網頁設計的沒問題。
還是先了解一下 python 中編碼,解碼,byte類型,str類型以及如何互轉再寫代碼吧,不然遇到一個簡單的坑也可能深陷幾天無法自拔。
myPage 已經是utf-8
就不需要再decode()看python培訓黃哥的三篇文章 python開發爬蟲漢字編碼不再是問題:將python2中漢字會出現亂碼的事一次性說清楚
article/python_bianma.md at master · pythonpeixun/article · GitHubpython爬蟲訪問多個網站、中文編碼的處理。 python爬蟲訪問多個網站、中文編碼的處理。python3訪問sina首頁中文的處理 python3訪問sina首頁中文的處理用3.x或許你能減少很多苦惱!這是頁面的問題,你要達到100%瀏覽器的水準是不可能滴。中國的大牛們還開發不出與chrome匹敵滴瀏覽器滴。
最後一句改成unicodePage = myPage.decode("utf-8", "ignore")試試
你為什麼假定網頁的編碼一定是utf8呢,試試gbk,gb2132,gb18030。之前做爬蟲就是這幾種編碼都試一遍~~
推薦閱讀:
※說郵箱的時候為什麼經常用「#」代替「@」?
※如何抓取url不變的網站數據?
※beautifulsoup與scrapy 這兩者之間有什麼區別?
※selenium 怎樣設置請求頭?
※網頁上的一張圖片右鍵選擇新窗口打開是正常的,直接複製地址到地址欄打開就不正常了。誰知道是什麼原因嗎?