"通信を発生させずにHTMLを解析"をしたい・・・
今までPHPでHTML解析するときは「Simple HTML DOM Parser」を利用しており、数年ぶりの利用で使い方を確認しているとこのような記事が。
「Simple HTML DOM Parser」はパフォーマンス面に優れておらず、今では「Goutte」を使った方がいいとか。
いざ「Goutte」の使い方を簡単に調べてみると「Simple HTML DOM Parser」のようにHTML文字列を引数に与えて解析対象のオブジェクトを作成することができなさそう。 - Simple HTML DOM Parser
// Simple HTML DOM Parserを使った文字列からオブジェクトを生成 $html = str_get_html( '<html><body>Hello!</body></html>' );
- Goutte
オブジェクトを生成するためにはリクエスト通信を発生させないといけなさそう。
$client = new Client();
$crawler = $client->request('GET', 'https://www.symfony.com/blog/');
// 通信で取得したオブジェクトが解析対象になる
通信を発生させずにHTMLを解析!!
Goutteでもファイル内に記載されているHTMLを解析できそう。
下記のようにすると、通信を発生せずに引数に与えたHTML文字列を解析することができます。localhost:80に対して、通信を発生させているため、該当のサーバ上で80番ポートをListenさせている必要があります。
<?php use Goutte\Client; $client = new Client(); $crawler = $client->request('HEAD', null); $crawler->clear(); // addHtmlContentの引数にHTML文字列 $crawler->addHtmlContent('<html><body>Hello!</body></html>'); echo $crawler->filter('html')->html(); //=> <body>Hello!</body> echo $crawler->filter('body')->text(); //=> Hello!