看板 Python 關於我們 聯絡資訊
最近在學著用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
suzuke:decode('big5') 07/25 14:02
會出現 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1 ※ 編輯: onionys 來自: 219.85.28.169 (07/25 18:03)
kenzou:encode('big5') 07/25 18:14
試了一下,同樣的程式在不同環境結果不太一樣...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)
suzuke:decode('big5','ignore') ? 07/25 21:07
onionys:encode('big5')和decode('big5')都會出現 07/25 21:33
onionys:'ascii' codec can't encode characters in position... 07/25 21:34
suzuke:加了'ignore' 也會? 07/25 21:51
onionys:加了'ignore',錯誤訊息就不會出現了,但是得到的字串 07/25 22:41
onionys:變成了'1201\xa2D',print 出來也是個看不懂的字...orz.. 07/25 22:41
scp958630:''.join([chr(ord(x)) for x in s]).decode('big5') 07/29 13:50
scp958630:s.encode('latin1').decode('big5') 07/29 13:52
onionys:感謝樓上~~成功了~~~原來可以這樣處理~~ 07/30 01:15