DOM を使った作業が生産的になるまでには時間がかかりますが、私の意見では、時間をかける価値はあります。 DOM は言語に依存しないインターフェイスであるため、複数の言語で実装されているため、プログラミング言語を変更する必要がある場合は、その言語の DOM API の使用方法をすでに知っている可能性が高くなります。
DOM 拡張機能の使用方法はStackOverflowで幅広く取り上げられているため、DOM 拡張機能を使用することを選択した場合、遭遇する問題のほとんどは Stack を検索/参照することで確実に解決できます。オーバーフロー。
XMLReader は、DOM と同様、libxml に基づいています。 HTML パーサー モジュールをトリガーする方法がわからないため、破損した HTML を解析するために XMLReader を使用することは、libxml の HTML パーサー モジュールを使用するように明示的に指示できる DOM を使用することほど強力ではない可能性があります。
シンプルな HTML DOM パーサーを試してください。
HTML要素を変更する方法:
リーリーHTML からコンテンツを抽出する:リーリースラッシュドットを取得:
リーリーネイティブ XML 拡張機能
私は、ネイティブ XML 拡張機能のの 1 つを使用することを好みます。これは、通常、PHP を使用した場合、すべてのサードパーティ ライブラリよりも高速であり、マークアップに対して必要なすべての制御を提供するためです。
ドム
DOM は、実際の (壊れた) HTML を解析して変更することができ、XPath クエリ を実行できます。これはlibxmlに基づいています。
DOM を使った作業が生産的になるまでには時間がかかりますが、私の意見では、時間をかける価値はあります。 DOM は言語に依存しないインターフェイスであるため、複数の言語で実装されているため、プログラミング言語を変更する必要がある場合は、その言語の DOM API の使用方法をすでに知っている可能性が高くなります。
DOM 拡張機能の使用方法はStackOverflowで幅広く取り上げられているため、DOM 拡張機能を使用することを選択した場合、遭遇する問題のほとんどは Stack を検索/参照することで確実に解決できます。オーバーフロー。
基本的な使用例と一般概念の概要は、他の回答にあります。
XMLリーダー
XMLReader は、DOM と同様、libxml に基づいています。 HTML パーサー モジュールをトリガーする方法がわからないため、破損した HTML を解析するために XMLReader を使用することは、libxml の HTML パーサー モジュールを使用するように明示的に指示できる DOM を使用することほど強力ではない可能性があります。
基本的な使用例は別の回答に記載されています。
XML パーサー
XML パーサー ライブラリも libxml に基づいており、SAXスタイルの XML プッシュ パーサーを実装しています。おそらくメモリ管理には DOM や SimpleXML よりも優れた選択肢ですが、XMLReader によって実装されたプル パーサーよりも使用するのが困難です。
シンプルXml
SimpleXML は、HTML が有効な XHTML であることがわかっている場合のオプションです。壊れた HTML を解析する必要がある場合は、ブロックされてしまうため、SimpleXml を考慮しないでください。 基本的な使用例が提供されており、PHP マニュアルには他の多くの例が記載されています。
サードパーティ ライブラリ (libxml ベース)サードパーティのライブラリを使用したい場合は、文字列解析の代わりに以下の
DOM/libxmlを実際に使用することをお勧めします。
FluentDomHTMLPageDom
phpQuery
これは「放棄されたソフトウェアとバグ: 自己責任で使用してください」と説明されていますが、最小限のメンテナンスが行われているようです。
ラミナスダム
fDOMドキュメント
セイバー/xml
流体XML
サードパーティ (libxml に基づいていない)
DOM/libxml をベースに構築する利点は、ネイティブ拡張機能をベースに構築しているため、すぐに優れたパフォーマンスが得られることです。ただし、すべてのサードパーティ ライブラリがこの方法を採用しているわけではありません。その一部を
に以下に示します。PHP シンプルな HTML DOM パーサー
通常、このパーサーは推奨しません。コードベースはひどいもので、パーサー自体は非常に遅く、メモリを大量に消費します。すべての jQuery セレクター (subselectorなど) が使用できるわけではありません。 libxml ベースのライブラリは、これを簡単に上回るパフォーマンスを発揮するはずです。
PHP HTML パーサー
繰り返しになりますが、このパーサーはお勧めしません。 CPU使用率が高いとかなり遅くなります。作成した DOM オブジェクトのメモリをクリアする機能もありません。これらの問題は、入れ子になったループで特に深刻です。文書自体は不正確でスペルミスが含まれており、2016 年 4 月 14 日以降修正の対応は行われていません。
HTML5
上記を使用して HTML5 を解析できますが、HTML5 で許可されているタグが原因で、奇妙なことが起こる可能性があります。したがって、HTML5 の場合は、専用のパーサーの使用を検討することをお勧めします。これらは PHP で記述されているため、低レベル言語でコンパイルされた拡張機能と比較してパフォーマンスが低下し、メモリ使用量が増加することに注意してください。
HTML5DomDocument
HTML5
###正規表現###
最後および
最も推奨されないでは、正規表現を使用して HTML a > からデータを抽出できます。一般に、HTML では正規表現を使用することはお勧めできません。Web 上で見つけられる、一致するタグのコード スニペットのほとんどは脆弱です。ほとんどの場合、これらは HTML の非常に特殊なスニペットでのみ機能します。マークアップの小さな変更 (どこかにスペースを追加したり、マークアップ内の属性を追加または変更したりするなど) によって、正規表現が正しく記述されないと失敗する可能性があります。 HTML で RegEx を使用する前に、何をしているのかを理解しておく必要があります。
HTML パーサーは HTML の構文規則をすでに知っています。新しい正規表現を作成するたびに、正規表現を学習する必要があります。場合によっては正規表現が適していますが、それはユースケースによって異なります。
あなたは
より信頼性の高いパーサーを作成できますただし、上記のライブラリがすでに存在する場合は、正規表現を使用して完全で信頼性の高いカスタム パーサーを作成し、この点でより適切な作業を行います。 、それは時間の無駄です。関連項目
クトゥルフ流解析HTML本
少しお金を使いたい場合は、見てみることができます
私は PHP アーキテクトや著者とは何の関係もありません。