2017-04-07 36 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如何解码响应内容。它会变得更快。