[問題] 如何抓取HTML字串

看板Python作者 (奧蘭多布魯)時間14年前 (2011/10/02 16:57), 編輯推噓0(0023)
留言23則, 3人參與, 最新討論串1/1
小弟第一次使用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

10/02 21:22, , 1F
.decode('utf-8') 或big5 看實際狀況
10/02 21:22, 1F

10/02 21:23, , 2F
看前面的\xef\xbb\xbf應該是utf-8沒錯 而且這是BOM
10/02 21:23, 2F

10/02 21:23, , 3F
不屬於內容的一部分,應該去除掉
10/02 21:23, 3F

10/02 21:24, , 4F
我是沒注意過decode會不會去掉BOM
10/02 21:24, 4F

10/02 21:24, , 5F
是了一下 手上的版本不會去掉
10/02 21:24, 5F

10/02 21:46, , 6F
多一個換行是因為原本的換行加上print產生的
10/02 21:46, 6F

10/02 21:47, , 7F
要讓print不產生換行請在後面加個,也就是print i,
10/02 21:47, 7F

10/02 21:56, , 8F
UTF-8 理論上不該有 BOM, 沒去掉是正常的
10/02 21:56, 8F

10/02 21:57, , 9F
查了一下資料, 似乎是「不建議, 但不禁止」
10/02 21:57, 9F

10/02 22:43, , 10F
BOM是什麼啊???
10/02 22:43, 10F

10/02 22:43, , 11F
我用.decode('utf-8')之後變成
10/02 22:43, 11F

10/02 22:44, , 12F
[u'\ufeffC1I230', u'\u4e5d\u4efd\u4e8c\u5c71', u'0']
10/02 22:44, 12F

10/02 22:45, , 13F
如果用.decode('big5')的話
10/02 22:45, 13F

10/02 22:45, , 14F
'big5' codec can't decode bytes in position 16-17: i
10/02 22:45, 14F

10/02 22:46, , 15F
illegal multibyte sequence
10/02 22:46, 15F

10/02 23:19, , 16F
你先確認一下原本的網頁是什麼編碼吧
10/02 23:19, 16F

10/02 23:43, , 17F
Unicode(UTF-8)
10/02 23:43, 17F

10/03 11:50, , 18F
這樣其實是正確的 你print [1]出來看吧 print unicode
10/03 11:50, 18F

10/03 11:50, , 19F
string的時候會根據locale轉成terminal的encoding
10/03 11:50, 19F

10/03 11:50, , 20F
讓你看到真正的字,但print list只會用repr()讓你看而已
10/03 11:50, 20F

10/03 11:51, , 21F
\uXXXX就是unicode charactor escape/repr之後的樣子
10/03 11:51, 21F

10/03 12:00, , 22F
BOM是byte order mark
10/03 12:00, 22F

10/04 16:25, , 23F
提點之後領悟了,感謝你~~~
10/04 16:25, 23F
文章代碼(AID): #1EY2Tjyi (Python)
文章代碼(AID): #1EY2Tjyi (Python)