2017-04-07 35 views
-1

樹莓派3上有一個HTTP代理服務器。 由BeautifulSoup(BS)分析XML數據。我發現當數據只包含'ASCII'格式的字符時,BS非常快。然而,當一些字符超出'ASCII'時,BS變得非常慢(對於150kb的XML字符串,這將需要10秒以上)。 我也嘗試過elementtree結構和XML.dom。他們都很慢。 XML.sax要好得多,但對於我在樹莓板上的Python 2.7.13,XML.sax只能處理'ASCII'。在使用sax之前,我必須使用data.encode('ascii','ignore'),但這也花了很長時間。 我只是想知道是否有處理utf8格式的XML字符串的好方法?如何在Python中高效分析xml字符串編碼

+0

在python中沒有專家,但'xml.sax.parseString(data.decode('utf-8'))'也許可以工作?相反,您解碼爲unicode。另請觀看這個精彩的演示:https://www.youtube.com/watch?v=Mx70n1dL534 – Niloct

+0

sax.parseString是一個輔助函數,與parser.parse()不同。它不支持utf-8格式。這可以在sax文件夾的__init__.py中看到:它從cStringIO導入無法處理unicode的StringIO。 –

+0

http://stackoverflow.com/questions/1817695/python-how-to-get-stringio-writelines-to-accept-unicode-string – Niloct

回答

0

爲了分析BS

response=requests.post(url) 
soup=BeautifulSoup(response.text,'xml') 

response.text 

的 「XML」 響應將響應內容自動解碼並在 「字符串」 返回。然而,BS將嘗試不同的可能的解碼方法,直到它成功解碼。這將需要一些時間。 (我猜「ASCII」是擺在首位的解碼方法列表,這就是爲什麼在「ASCII」的內容進行解碼速度快的原因)

使用

response.encoding='utf-8' 

response.text 

告訴BS如何解碼響應內容。它會變得更快。