2012-03-12 12 views
9

大量のダウンロードされたWebページHTML(120Kページ)を処理するPythonスクリプトを書きました。私はそれらを解析し、そこからいくつかの情報を抽出する必要があります。私はBeautifulSoupを使ってみましたが、これは簡単で直感的ですが、ゆっくりと超高速に動作するようです。これは弱いマシン(アマゾンで)で日常的に動作する必要があるため、速度が重要です。 BeautifulSoupよりもはるかに高速に動作するPythonのHTML/XMLパーサーがありますか?または私は正規表現の解析に頼る必要があります..高速python HTMLパーサ

+5

[pony away ...](http://stackoverflow.com/a/1732454/554546) –

+2

PythonでHTMLを解析する経験はありませんが、[こちら](http://blog.ianbicking .org/2008/03/30/python-html-parser-performance /)は役に立つかもしれないベンチマーク結果です。 –

+8

[正規表現とHTML ==失敗](http://stackoverflow.com/a/1732454/554546) –

答えて

13

lxmlのは、高速なXMLおよびHTMLパーサーです:http://lxml.de/parsing.html

+2

ありがとう、ベンチマークはlxmlがはるかに速いことを示しています! – WeaselFox

+0

インストールするには 'pip install lxml' – Flimm

0

try:ElementTreeは速くなるかもしれませんが、わかりません。

xml.etree.ElementTree import ElementTree 
+0

私もこれを提案しようとしていましたが、私はBeautifulSoupに対してこれのパフォーマンス比をサポートするデータがありません – inspectorG4dget

3

SAXスタイルのパーサは、DOMベースのものより高速になります。あなたのコードには要素のストリームが与えられており、その関係を推測(そして潜在的に格納)しなければなりません。必要なデータを取得するのに必要なだけの状態を維持する必要があります。対照的に、DOMスタイルのパーサーは、ナビゲート可能なオブジェクトモデルを構築する必要があります。これには、おそらく使用する必要のない時間(およびメモリ)が必要です。

PythonにはHTML用のパーサーがあります。 HTMLParser(Python 3ではhtml.parser)と呼ばれています。しかし、抽出したいデータを認識するのがどれほど難しいかによっては、そのような解析をうまく争うことは非常に難しいかもしれません。サンプルファイルを投稿して、そこから抽出したいデータがあるとしたら、おそらく駄目になる可能性があります。