HTML
 Computer >> コンピューター >  >> プログラミング >> HTML

PHPのDOMDocumentとDOMXPathを使ってHTMLを解析・テキスト抽出する方法

PHPではDOMDocumentクラスとDOMXPathクラスを組み合わせることで、HTML文字列を解析し、特定の条件に一致する要素からテキストを簡単に抽出できます。

例えば、「class="main"が指定された<div>タグの中にある、class="text"が指定された<div>タグ内のテキスト」を取得したい場合は、以下のようなコードで実現できます。

サンプルコード

$html = <<<HTML
<div class="main">
    <div class="text">
        This is text 1
    </div>
</div>
<div class="main">
    <div class="text">
        This is text 2
    </div>
</div>
HTML;
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$tags = $xpath->query('//div[@class="main"]/div[@class="text"]');
foreach ($tags as $tag) {
    var_dump(trim($tag->nodeValue));
}

コードの解説

  • loadHTML(): HTML文字列を読み込み、DOMツリーとして内部に構築します。
  • DOMXPath::query(): XPathクエリを使用して、目的の要素を検索し、該当するノードのリスト(DOMNodeList)を返します。
  • XPath式「//div[@class="main"]/div[@class="text"]」は、「class属性がmainであるdiv要素の直下にある、class属性がtextであるdiv要素」をすべて取得することを意味します。

実行結果

上記のコードを実行すると、次のような出力が得られます。

string 'This is text 1' (length=14)
string 'This is text 2' (length=14)

このように、DOMXPathのqueryメソッドにXPathクエリを渡すことで、ユーザーが検索したい要素のリストを柔軟に取得できます。スクレイピングやHTML解析の処理において非常に便利な手法なので、ぜひ活用してみてください。

  1. HTML DOMスタイルのflexFlowプロパティの使い方を徹底解説

    HTML DOMのスタイルにおけるflexFlowプロパティは、要素のflexDirection(フレックスアイテムの方向)とflexWrap(折り返しの可否)をまとめて指定するためのプロパティです。これら2つのプロパティに対するショートハンド(一括指定)として機能し、記述した順序に従って値が適用されます。flexFlowプロパティの構文flexFlowプロパティを設定する際の基本的な構文は以下の通りです。object.style.flexFlow = flex-direction flex-wrap|initial|inherit;指定できる値の一覧flexFlowプロパティに設定できる各値

  2. Seleniumでテキスト入力ボックスのEnterキー操作をシミュレートする方法

    Selenium WebDriverを使用すると、HTMLのテキスト入力ボックスに対するEnterキーの押下を簡単にシミュレートできます。その際に活用するのが sendKeys メソッドで、引数として Keys.ENTER を渡します。また、同じ動作は Keys.RETURN を引数に渡すことでも実現できます。Keys クラスを利用するためには、あらかじめコード内で org.openqa.selenium.Keys パッケージをインポートしておく必要があります。ここでは、入力ボックスにテキストを入力した後、ENTER/RETURNキーを送信する手順を具体的に見ていきましょう。実装例Keys.E