ホームページ  >  記事  >  バックエンド開発  >  PHP 解析 HTML クラス ライブラリ simple_html_dom

PHP 解析 HTML クラス ライブラリ simple_html_dom

WBOY
WBOYオリジナル
2016-08-08 09:28:501338ブラウズ

ダウンロードアドレス: https://github.com/samacs/simple_html_dom
パーサーは HTML ドキュメントの検証に役立つだけでなく、W3C 標準に準拠していない HTML ドキュメントを解析することもできます。 jQuery に似た要素セレクターを使用して、ID、クラス、タグなどで要素を検索し、ドキュメント ツリーを追加、削除、変更する機能も提供します。もちろん、このような強力な HTML Dom パーサーは完璧ではありません。使用中のメモリ消費には細心の注意を払う必要があります。ただし、この記事では最後にメモリの過剰な消費を避ける方法を説明しますので、ご安心ください。
使い始める
クラスファイルをアップロードした後、このクラスを呼び出すには3つの方法があります:
URLからHTMLドキュメントをロードする
文字列からHTMLドキュメントをロードする
ファイルからHTMLドキュメントをロードする

. コードは次のとおりです:


// 新しい Dom インスタンスを作成します
$html = new simple_html_dom();
// url からロード
$html->load_file('http://www .jb51 .net');
// 文字列からロード
$html->load('文字列から HTML ドキュメントのデモをロード') ;
/ /ファイルからロード
$html->load_file('path/file/test.html');
?>


文字列から HTML ドキュメントをロードする場合は、インターネットからダウンロードする必要があります初め。 cURL を使用して HTML ドキュメントを取得し、DOM にロードすることをお勧めします。
HTML 要素を検索する
検索関数を使用して、HTML ドキュメント内の要素を検索できます。返される結果は、オブジェクトを含む配列です。これらのオブジェクトにアクセスするには、HTML DOM 解析クラスの関数を使用します。

. コードは次のとおりです:


//HTML ドキュメント内のハイパーリンク要素を検索します。
$a = $html->find('a');
//ドキュメント内の (N) 番目のハイパーリンクを検索します。見つからない場合は、空の配列を返します。
$a = $html->find( ' a', 0);
// id を持つ div 要素を検索します main Element
$divs = $html->find('div[id]');
// id 属性を含むすべての要素を検索します
$ divs = $html->find('[id]');
?>

jQuery のようなセレクターを使用して、位置指定された要素を見つけることもできます:

. コードは次のとおりです。以下:

// id='#container' で要素を検索
$ret = $html->find('#container');
// class=foo ですべての要素を検索
$ ret = $html->find('.foo');
// 複数の要素の html タグを検索します
$ret = $html->find('a, img');
// 次のように使用することもできますthis
$ret = $html->find('a[title], img[title]') ;
?>

パーサーはサブ要素の検索をサポートしています

.コードは次のとおりです:

// ul リスト内のすべての li 項目を検索します
$ret = $html->find('ul li');
//class= で li 項目を検索しますselected UL listで指定
$ret = $html->find('ul li.selected');
?>

これを使うのが面倒だと思う場合は、組み込み関数を使用できます要素の親要素、子要素、および隣接する要素を簡単に見つけることができます

コードは次のとおりです:

// 親要素を返す
$e->parent;
// 子要素の配列を返します
$e->children;
// 指定された子要素をインデックス番号で返します
$e->children(0);
// 最初のリソース速度を返します
$e ->first_child ();
// 最後の子要素を返します
$e->last _child ();
// 前の隣接要素を返します
$e->prev_sibling ();
// 次の要素を返します隣接要素
$e->next_sibling ();
?>

要素の属性操作


属性セレクターを操作するには、単純な正規表現を使用します。
[attribute] - 特定の属性を含む HTML 要素を選択します
[attribute=value] - 指定された value 属性を持つすべての HTML 要素を選択します
[attribute!=value] - 指定されていない属性を持つすべての HTML 要素を選択しますvalue 属性
[attribute^=value] - 指定された値で始まるすべての HTML 要素を選択します
[attribute$=value] 指定された値で終わるすべての HTML 要素を選択します
[attribute*=value] - value 属性を指定する HTML 要素をすべて選択します
パーサーで element 属性を呼び出します
DOM 内の element 属性もオブジェクトです:

コードは次のとおりです。

// この例 $a のアンカー リンク値を $link 変数に割り当てます
$link = $a->href;
?>

または:

.コードは次のとおりです:

< ?php

$link = $html->find('a',0)->href;
?


各オブジェクトには 4 つの基本的なオブジェクト プロパティがあります:
tag – HTML タグ名を返します
innertext – innerHTML を返します
outertext – externalHTML を返します
plaintext – HTML タグ内のテキストを返します
パーサーで要素を編集します
要素の属性の編集の使用法は、要素の属性を呼び出す場合と似ています:

. コードは次のとおりです:


//$ のアンカー リンクを割り当てます。新しい値
$a->href = 'http://www.jb51.net';
// アンカーリンクを削除
$a->href = null;
// アンカーリンクが存在するか確認
if( isset ($a->href)) {
//code
}
?>


パーサーで要素を追加または削除する特別なメソッドはありませんが、別の方法で使用することができます:

. コードは次のとおりです:


// 要素
$e->outertext = '

' をカプセル化します。 ;
// 要素を削除
$e->outertext = '';
// 要素を追加
$e->outertext = $e->outertext '
foo
';
/ / 要素
$e ->outertext = '
foo
' を挿入します。 $e->outertext;
?


変更された HTML DOM ドキュメントの保存も非常に簡単です。 .

コードは次のとおりです:$doc = $html;

// 出力

echo $doc;
?>



パーサーが大量のメモリを消費しないようにする方法


この記事の冒頭で、Simple HTML DOM パーサーがメモリを大量に消費する問題について触れました。 PHP スクリプトがメモリを大量に消費すると、Web サイトが応答を停止し、一連の深刻な問題が発生します。解決策も非常に簡単です。パーサーが HTML ドキュメントをロードして使用した後、このオブジェクトを必ずクリーンアップしてください。もちろん、問題をあまり深刻に考えないでください。原稿が 2 ~ 3 枚しかセットされていない場合は、クリーニングしてもしなくても大きな違いはありません。 5 つ、10 つ、またはそれ以上のドキュメントをロードする場合、ドキュメントを使用した後にメモリをクリアするのは絶対にあなたの責任です ^_^

コードは次のとおりです:$html- >クリア();

?>



上記では、PHP 解析 HTML クラス ライブラリ simple_html_dom を、関連する内容も含めて紹介しています。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。