2017-04-07 11 views
-1

ラズベリー3にHTTPプロキシサーバーがあります。 XMLデータはBeautifulSoup(BS)によって分析されます。データに「ASCII」形式の文字しか含まれていないとき、BSは超高速でした。しかし、文字の一部が「ASCII」を超えていた場合、BSは非常に遅くなりました(150kbのXML文字列の場合、10秒以上かかる場合があります)。 また、elementtree構造体とXML.domも試しました。両方とも遅かった。 XML.saxははるかに優れていましたが、私のpython 2.7.13のラズベリー版では、XML.saxは 'ASCII'しか扱えませんでした。私はサックスを使用する前にdata.encode( 'ascii'、 'ignore')を使用する必要がありますが、これも長くかかりました。 私はutf8形式のXML文字列を扱う良い方法があるのだろうかと疑問に思っていますか? Pythonで 'utf-8'エンコーディングを効率的に解析する方法

+0

'xml.sax.parseString(data.decode( 'utf-8'))'のようなpythonの専門家はいないでしょうか?代わりにユニコードにデコードします。この素晴らしいプレゼンテーションもご覧ください:https://www.youtube.com/watch?v=Mx70n1dL534 – Niloct

+0

sax.parseStringはヘルパー関数であり、parser.parse()とは異なります。 utf-8形式はサポートされていません。これは、saxフォルダの__init__.pyにあります。これは、Unicodeを処理できないcStringIOから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は、復号化が成功するまで、異なる可能な復号化方法を試みる。これには時間がかかります。

response.text 

使用

response.encoding='utf-8' 

(私は「ASCII」は、復号方式リストの最初の場所にあり、それは「ASCII」の内容は、高速デコードされた理由だと思います) BSに応答内容の解読方法を伝える。そして、はるかに速く進むでしょう。

関連する問題