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