PHP 解析 HTML クラス ライブラリ simple_html_dom (詳細な紹介)_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:01:28
オリジナル
826 人が閲覧しました

ダウンロード アドレス: 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');

// Load
$html->load('文字列から HTML ドキュメントのデモをロード' );

/ /ファイルからロード
$html->load_file('path/file/test.html');
?>

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

//HTML 内のハイパーリンクを検索します。 document 要素
$a = $html->find('a');

//ドキュメント内の (N) 番目のハイパーリンクを検索し、見つからない場合は空の配列を返します
$a = $html-> ;find ('a', 0);

// ID main を持つ div 要素を検索します
$main = $html->find('div[id=main]',0);

// すべて検索しますid を持つ div 要素を含む要素attribute
$divs = $html->find('div[id]');

// id を含む要素をすべて検索しますattribute
$divs = $html->find('[id ]');
?>


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

コードをコピーします コードは次のとおりです:
// Find id='#container' element
$ret = $html->find('#container');

// class=foo を持つすべての要素を検索
$ret = $html->find('.foo ');

// 複数の HTML タグを検索
$ret = $html->find('a, img');

// このように使うこともできます
$ret = $html->find ('a[title] , img[title]');
?>


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

コードをコピーします コードは次のとおりです:

// ul リスト内のすべてを検索 The li item
$ret = $html->find('ul li');

// ul リスト内で指定された class=selected を持つ li item を検索します
$ ret = $html->find('ul li.selected ');

?>


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

コードをコピーします コードは次のとおりです:
// 親要素を返します
$e->parent;

// 配列を返します子要素の数
$e->children;

// 指定された子要素をインデックス番号で返します
$e-> ;children(0);

// 最初のリソース要素を返します
$e->first_child ();

// 最後の子要素を返す
$e->last _child ();

// 前の隣接する要素を返す
$e->prev_sibling ();

// 次の隣接する要素を返すelement
$e->next_sibling ();
?>


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


コードをコピーします コードは次のとおりです:

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

または:
コードをコピーします コードは次のとおりです:

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

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

//$a
$a->href = 'http://www. jb51.net';

//アンカーリンクを削除
$a->href = null;

//アンカーリンクが存在するか検出
if(isset($a->href)) {
//コード
}
?>

解析 コンテナ内の要素を追加または削除する特別な方法はありませんが、別の方法で使用できます。
コードをコピーします コードは次のとおりです。 ?php
// 要素
$e->outertext = '
' をカプセル化します。 $e->outertext '
';

// 要素を削除します
$e->outertext = '';

// 要素を追加します
$e->outertext = $e->outertext '
foo
';

// 要素を挿入します
$ e->outertext = '
foo
' . $e->outertext;
?


変更した HTML DOM ドキュメントの保存も非常に簡単です:


コードをコピーします。コードは次のとおりです:
$doc = $html;/ / Output
echo $doc;
?>




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

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

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




http://www.bkjia.com/PHPjc/327997.html
www.bkjia.com

本当http://www.bkjia.com/PHPjc/327997.html技術記事ダウンロード アドレス: https://github.com/samacs/simple_html_dom パーサーは、HTML ドキュメントの検証に役立つだけでなく、W3C 標準に準拠していない HTML ドキュメントも解析できます。 jQuer のようなものを使用します...
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!