解決python錯誤 UnicodeDecodeError: 'gb2312' codec can't decode byte 0x8b in position 1: illegal multibyte sequence


報錯的代碼:

url= 'http://kaijiang.500.com/shtml/ssq/19001.shtml'
page =urllib.request.urlopen(url)
content = page.read().decode('gb2312')

  

報這個錯的原因是獲取到的網頁內容是經過壓縮了的,打開url可以看到請求head

Accept-Encoding:gzip, deflate

 

一種方式是請求時把Accept-Encoding設為空,這樣的話網頁數據未壓縮,會相對比較大,增加網絡傳輸時間
另一種方式就是對請求后的數據解壓,顯然這個方式處理會更快,如下
content = gzip.decompress(page.read()).decode('gb2312')

 

可是修改之后發現運行還是報錯,這時候發現應該是因為網頁中含有編碼集之外的字符(網頁內容指定charset是gb2312),就算加到更大范圍還是報錯(PS:漢字字符集范圍 gb2312 < gbk < gb18030)

這時候選擇忽略這些無法解碼的字符

content = gzip.decompress(page.read()).decode('gb2312','ignore')

 

再運行代碼,發現這個問題已經解決了(如果你看了我前面一篇雙色球分析的程序,現在應該知道為什么有時會報錯了~~)

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM