看板 Python 關於我們 聯絡資訊
小弟第一次使用python抓取網頁資料 我的HTML檔是這樣的: {{datas.0}}&nbsp{{datas.1}}&nbsp{{datas.2}}<br> C1I230(0) 你好(1) 0(2) (&nbsp是空白) 466940(0) 我好(1) 0(2) (<br>是換行) 網頁上顯示是: C1I230 你好 0 466940 我好 0 我在python裡面使用: urltmp = urllib.urlopen("http://localhost:8080/test") urluse = urltmp.readlines() for i in urluse: print i 我不知道方法是否正確(Google來的) 我得到的東西是: C1I230&nbsp你好&nbsp0<br> 466940&nbsp我好&nbsp0<br> (都會多一行空白) 我檢查了一下type是string 於是我使用i.split()就發生悲劇了...(split('&nbsp')也是一樣...) ['\xef\xbb\xbfC1I230', '\xe4\xb9\x9d\xe4\xbb\xbd\xe4\', '0<br>\n'] 請問這是編碼的問題嗎??? 中間那行空白也會被影響嗎??? 我要怎麼拿到兩個list---->['C1I230','你好','0'],['466940','我好','0'] 懇請各位大大傳授... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.33.86.65
buganini:.decode('utf-8') 或big5 看實際狀況 10/02 21:22
buganini:看前面的\xef\xbb\xbf應該是utf-8沒錯 而且這是BOM 10/02 21:23
buganini:不屬於內容的一部分,應該去除掉 10/02 21:23
buganini:我是沒注意過decode會不會去掉BOM 10/02 21:24
buganini:是了一下 手上的版本不會去掉 10/02 21:24
buganini:多一個換行是因為原本的換行加上print產生的 10/02 21:46
buganini:要讓print不產生換行請在後面加個,也就是print i, 10/02 21:47
uranusjr:UTF-8 理論上不該有 BOM, 沒去掉是正常的 10/02 21:56
uranusjr:查了一下資料, 似乎是「不建議, 但不禁止」 10/02 21:57
Andy58974:BOM是什麼啊??? 10/02 22:43
Andy58974:我用.decode('utf-8')之後變成 10/02 22:43
Andy58974:[u'\ufeffC1I230', u'\u4e5d\u4efd\u4e8c\u5c71', u'0'] 10/02 22:44
Andy58974:如果用.decode('big5')的話 10/02 22:45
Andy58974:'big5' codec can't decode bytes in position 16-17: i 10/02 22:45
Andy58974:illegal multibyte sequence 10/02 22:46
uranusjr:你先確認一下原本的網頁是什麼編碼吧 10/02 23:19
Andy58974:Unicode(UTF-8) 10/02 23:43
buganini:這樣其實是正確的 你print [1]出來看吧 print unicode 10/03 11:50
buganini:string的時候會根據locale轉成terminal的encoding 10/03 11:50
buganini:讓你看到真正的字,但print list只會用repr()讓你看而已 10/03 11:50
buganini:\uXXXX就是unicode charactor escape/repr之後的樣子 10/03 11:51
buganini:BOM是byte order mark 10/03 12:00
Andy58974:提點之後領悟了,感謝你~~~ 10/04 16:25