.Netで、XPathを使用して整形式でないHTMLを簡単に解析できるこの優れたライブラリHtmlAgilityPackを見つけました。私はこれを.Netサイトで数年間使用しましたが、Python、Ruby、およびその他のプロジェクト用のより面倒なライブラリを受け入れる必要がありました。他の言語の同様のライブラリを知っている人はいますか?
7 に答える
lxml についての言及が 1 つもないことに驚いています。これは非常に高速で、CPython ライブラリを使用できる環境であればどのような環境でも動作します。
lxml を使用して XPATH 経由で HTML を解析する方法は次のとおりです。
>>> from lxml import etree
>>> doc = '<foo><bar></bar></foo>'
>>> tree = etree.HTML(doc)
>>> r = tree.xpath('/foo/bar')
>>> len(r)
1
>>> r[0].tag
'bar'
>>> r = tree.xpath('bar')
>>> r[0].tag
'bar'
Python では、ElementTidyはタグ スープを解析し、XPath を使用してクエリを実行できる要素ツリーを生成します。
>>> from elementtidy.TidyHTMLTreeBuilder import TidyHTMLTreeBuilder as TB
>>> tb = TB()
>>> tb.feed("<p>Hello world")
>>> e= tb.close()
>>> e.find(".//{http://www.w3.org/1999/xhtml}p")
<Element {http://www.w3.org/1999/xhtml}p at 264eb8>
私が得た最も安定した結果は、lxml.html のスープパーサーを使用したものです。python-lxml と python-beautifulsoup をインストールする必要があります。その後、次の操作を実行できます。
from lxml.html.soupparser import fromstring
tree = fromstring('<mal form="ed"><html/>here!')
matches = tree.xpath("./mal[@form=ed]")
BeautifulSoupは、乱雑な HTML をクリーンな方法で処理するための優れた Python ライブラリです。
質問は、「 XPath式を評価できるようにHTMLをXMLに変換する方法」とより正確に述べることができるようです。
2 つの優れたツールを次に示します。
オープンソース プログラムであるTagSoupは、 John Cowanによって開発された Java および SAX ベースのツールです。これは Java で書かれた SAX 準拠のパーサーであり、整形式または有効な XML を解析する代わりに、実際に見られるままに HTML を解析します。TagSoup は、合理的なアプリケーション設計に似たものを使用して、このような処理を行う必要がある人向けに設計されています。SAX インターフェイスを提供することにより、標準の XML ツールを最悪の HTML に適用することもできます。TagSoup には、HTML ファイルを読み取り、クリーンな HTML または XHTML に近い整形式の XML を生成できるコマンドライン プロセッサも含まれています。
Taggleは、TagSoup の商用 C++ ポートです。SgmlReaderは、Microsoft のChris Lovettによって開発されたツールです。
SgmlReader は、任意の SGML ドキュメント (HTML の組み込みサポートを含む) に対する XmlReader API です。整形式の XML 結果を出力するコマンド ライン ユーティリティも提供されます。
スタンドアロンの実行可能ファイルと完全なソース コードを含む zip ファイルをダウンロードします: SgmlReader.zip
Ruby では、Jb Evain が指摘した Hpricot を強くお勧めします。より高速な libxml ベースの競合他社を探している場合は、Nokogiri ( http://tenderlovemaking.com/2008/10/30/nokogiri-is-released/を参照) も非常に優れています (XPath と CSS 検索の両方をサポートしています) 。 Hpricot ですが、より高速です)。基本的なwikiといくつかのベンチマークがあります。
libxml2 と呼ばれる XML 用の無料の C 実装があり、これには XPath 用の API ビットがいくつかあり、これを使用して大成功を収めました。この API を使用して、読み込まれるドキュメントとして HTML を指定できます。これは、完璧ではないHTMLドキュメントでうまくいきました..
ほとんどの場合、XPath は、インバウンド HTML が適切にコーディングされ、「xml ドキュメントのように」読み取れる場合に最も役立ちます。HTML ドキュメントをクリーンアップするために、この目的に特化したユーティリティの使用を検討することをお勧めします。以下に一例を示します: http://tidy.sourceforge.net/
これらの XPath ツールに関する限り、ほとんどの実装は実際には libxml2 などの既存の C または C++ ライブラリに基づいていることがわかります。