作者Andy58974 (奧蘭多布魯)
看板Python
標題[問題] 如何抓取HTML字串
時間Sun Oct 2 16:57:15 2011
小弟第一次使用python抓取網頁資料
我的HTML檔是這樣的:
{{datas.0}} {{datas.1}} {{datas.2}}<br>
C1I230(0) 你好(1) 0(2) ( 是空白)
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 你好 0<br>
466940 我好 0<br>
(都會多一行空白)
我檢查了一下type是string
於是我使用i.split()就發生悲劇了...(split(' ')也是一樣...)
['\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
1F:→ buganini:.decode('utf-8') 或big5 看實際狀況 10/02 21:22
2F:→ buganini:看前面的\xef\xbb\xbf應該是utf-8沒錯 而且這是BOM 10/02 21:23
3F:→ buganini:不屬於內容的一部分,應該去除掉 10/02 21:23
4F:→ buganini:我是沒注意過decode會不會去掉BOM 10/02 21:24
5F:→ buganini:是了一下 手上的版本不會去掉 10/02 21:24
6F:→ buganini:多一個換行是因為原本的換行加上print產生的 10/02 21:46
7F:→ buganini:要讓print不產生換行請在後面加個,也就是print i, 10/02 21:47
8F:→ uranusjr:UTF-8 理論上不該有 BOM, 沒去掉是正常的 10/02 21:56
9F:→ uranusjr:查了一下資料, 似乎是「不建議, 但不禁止」 10/02 21:57
10F:→ Andy58974:BOM是什麼啊??? 10/02 22:43
11F:→ Andy58974:我用.decode('utf-8')之後變成 10/02 22:43
12F:→ Andy58974:[u'\ufeffC1I230', u'\u4e5d\u4efd\u4e8c\u5c71', u'0'] 10/02 22:44
13F:→ Andy58974:如果用.decode('big5')的話 10/02 22:45
14F:→ Andy58974:'big5' codec can't decode bytes in position 16-17: i 10/02 22:45
15F:→ Andy58974:illegal multibyte sequence 10/02 22:46
16F:→ uranusjr:你先確認一下原本的網頁是什麼編碼吧 10/02 23:19
17F:→ Andy58974:Unicode(UTF-8) 10/02 23:43
18F:→ buganini:這樣其實是正確的 你print [1]出來看吧 print unicode 10/03 11:50
19F:→ buganini:string的時候會根據locale轉成terminal的encoding 10/03 11:50
20F:→ buganini:讓你看到真正的字,但print list只會用repr()讓你看而已 10/03 11:50
21F:→ buganini:\uXXXX就是unicode charactor escape/repr之後的樣子 10/03 11:51
22F:→ buganini:BOM是byte order mark 10/03 12:00
23F:→ Andy58974:提點之後領悟了,感謝你~~~ 10/04 16:25