Re: 一直沒有辦法read html檔
※ 引述《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
12/03 13:16, 1F
→
12/03 13:16, , 2F
12/03 13:16, 2F
推
12/03 16:40, , 3F
12/03 16:40, 3F
推
12/05 19:10, , 4F
12/05 19:10, 4F
討論串 (同標題文章)
Python 近期熱門文章
PTT數位生活區 即時熱門文章
18
34