[問題] 用lxml.html.parse 抓 big5 的html問題...
最近在學著用lxml這個lib,在練習著分析一些網頁的資料。
我通常的用法都是先:
root = lxml.html.parse('http://XXXXXXXXX').getroot()
之後再用xpath來分析。
但是抓到用big5 coding的網頁時,root.xpath裡面抓到所有中文字全部變成亂碼
(我的系統是用mac osx 下用 utf-8)
像是從root裡面抓出來的資料 "台塑" 兩個字:
用etree.tostring(root)的時候會得到一般字串: '¥x¶ì'
用root.xpath去撈出來的時候會變成unicode的字串: u'\xa5x\xb6\xec'
print u'\xa5x\xb6\xec' 就會出現一堆亂碼
看起來好像是一開始在parse抓網頁資料的時候就弄錯編碼的樣子,所以之後
一連串得到的中文字現全部都混亂掉了...Orz...
想問一下有沒有什麼轉換的辦法?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.76.181
→
07/25 14:02, , 1F
07/25 14:02, 1F
會出現
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1
※ 編輯: onionys 來自: 219.85.28.169 (07/25 18:03)
→
07/25 18:14, , 2F
07/25 18:14, 2F
試了一下,同樣的程式在不同環境結果不太一樣...Orz...
簡易程式碼如下:
----------------------------------------------------------------------------
#!/usr/bin/python
#-*- coding: utf8 -*-
from lxml.html import parse
def fromYahooStock(stoNum):
qurl = 'http://tw.stock.yahoo.com/q/q?s=' + str(stoNum)
root = parse(qurl).getroot()
temp = root.xpath('/html/body/center/table/tr/td/table/tr/td/a')[0]
print temp.text
if __name__ == "__main__":
fromYahooStock(1201) #還我味全龍~~~
-----------------------------------------------------------------------------
字串為"1201味全",然後在下面兩個環境下跑的話....
測試環境
OS: Mac OSX 10.6.8
python: 2.7.1
lxml: 2.2.8
得到結果: 出現亂碼...
得到的字串: u'1201\xa8\xfd\xa5\xfe'
解決方法: ...Orz...正在找...
----------------------------------------
OS: Debian 6
python: 2.6.6
lxml: python-lxml 2.2.8-2
得到結果: 一切正常...
得到的字串: u'1201\u5473\u5168'
解決方法: 一切正常...
※ 編輯: onionys 來自: 219.85.28.169 (07/25 19:10)
→
07/25 21:07, , 3F
07/25 21:07, 3F
→
07/25 21:33, , 4F
07/25 21:33, 4F
→
07/25 21:34, , 5F
07/25 21:34, 5F
→
07/25 21:51, , 6F
07/25 21:51, 6F
→
07/25 22:41, , 7F
07/25 22:41, 7F
→
07/25 22:41, , 8F
07/25 22:41, 8F
→
07/29 13:50, , 9F
07/29 13:50, 9F
→
07/29 13:52, , 10F
07/29 13:52, 10F
→
07/30 01:15, , 11F
07/30 01:15, 11F