Re: 一直沒有辦法read html檔

看板Python作者 (allstar)時間13年前 (2012/12/03 13:10), 編輯推噓2(202)
留言4則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《left ()》之銘言: : 各位大大 幫忙一下了 : 目前一直卡在這個檔沒法子讀 : http://www.cmlab.csie.ntu.edu.tw/~left/index813.html : with open('index813.html','r') as page: : for each_line in page: : print(each_line.strip()) : 出現下面error 一直處理不掉 : UnicodeDecodeError: 'cp950' codec can't decode bytes in position 1256-1257: illegal multibyte sequence : args = ('cp950', b'50"> 6/19</td>\n<td width="120">toughroleX</td...</div>\n</div>\n</div>\n</div>\n</body>\n</html>', 1256, 1258, 'illegal multibyte sequence') : encoding = 'cp950' : end = 1258 : object = b'50"> 6/19</td>\n<td width="120">toughroleX</td...</div>\n</div>\n</div>\n</div>\n</body>\n</html>' : reason = 'illegal multibyte sequence' : start = 1256 : with_traceback = <built-in method with_traceback of UnicodeDecodeError object> 簡單來說,是因為底下這行字無法用 cp950 decode "[問題] 一般劵商研究員和富邦ARM的抉擇?" 就是 "般" 跟 "商" 中間那個看似空白的東西出問題 如果你只是想把可解碼的部分印出來,那很簡單 用 binary mode 讀檔,不要用 text mode 然後自己 decode binary data,把無法解碼的部分處理掉,像是 ignore python3 code 如下: with open('index813.htm', 'rb') as f: binary_data = f.read() data = binary_data.decode('cp950', 'ignore') lines = data.splitlines() for line in lines: print(line) 如果你是想分析網頁,那就看你要怎麼處理了 ignore 是一種方法,但是會損失資訊 猜編碼是一種方法,有現成 module 可用,不過準確率不是 100% 存 binary data 是一種方法,保證不會損失資訊 不過以後絕對會遇到相同問題,要自己知道怎麼解決 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.46.112.229

12/03 13:16, , 1F
確定要 ignore 的話,直接開 text mode 也可以
12/03 13:16, 1F

12/03 13:16, , 2F
with open('c:\\1.htm', 'r', errors='ignore') as f:
12/03 13:16, 2F

12/03 16:40, , 3F
太感謝了 已經解決了
12/03 16:40, 3F

12/05 19:10, , 4F
or try big5-hkscs gb18030
12/05 19:10, 4F
文章代碼(AID): #1Gl3H2NT (Python)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1Gl3H2NT (Python)