作者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