jQueryのようなセレクターを備えたPHP HTML DOMパーサー

こんにちは、ハブロビテス。 この投稿では、 SC ChenJohn Schlickによる PHP Simple HTML DOM Parser (sourceforgeへのリンク)と呼ばれる共同プロジェクトについて説明します。



プロジェクトのアイデアは、セレクターのようなjQueryを使用してhtmlコードを操作できるツールを作成することです。 Jose Solorzanoのオリジナルのアイデアであり、php 4バージョンに実装されています。 このプロジェクトは、php5 +に基づくより高度なバージョンです。



このレビューでは、 公式マニュアルからの簡単な抜粋と、twitterのパーサーの実装例を示します。 公平を期して、同様の投稿がすでに habrahabrに存在していることを指摘する必要がありますが、私の意見では、情報が少なすぎます。 このトピックに興味のある方、猫へようこそ。



HTMLページコードの取得


$html = file_get_html('http://habrahabr.ru/'); //   https://
      
      





同志Fedcompfile_get_contentsと404応答について有用なコメントをしました 。 元のスクリプトは、ページ404に要求されても何も返しません。 これを修正するために、get_headersにチェックを追加しました。 変更されたスクリプトはここ取得できます

タグ名でアイテムを検索する


 foreach($html->find('img') as $element) { //   img   echo $element->src . '<br>'; //       src }
      
      





html要素の変更


 $html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>'); //  html    (file_get_html() -  ) $html->find('div', 1)->class = 'bar'; //   div    1  "bar" $html->find('div[id=hello]', 0)->innertext = 'foo'; //    div  id="hello"  foo echo $html; //  <div id="hello">foo</div><div id="world" class="bar">World</div>
      
      





要素のテキストコンテンツの取得(プレーンテキスト)


 echo file_get_html('http://habrahabr.ru/')->plaintext;
      
      







記事の目的は、このスクリプトに関する包括的なドキュメント、 公式マニュアルで見つけることができるすべての機能の詳細な説明を提供することではありません、コミュニティが希望する場合は、喜んでマニュアル全体をロシア語に翻訳します。今のところ、記事の冒頭で約束されているtwitterのサンプルパーサーを提供します。



twitterからのメッセージのパーサーの例


 require_once 'simple_html_dom.php'; //    $username = 'habrahabr'; //   twitter $maxpost = '5'; // -  $html = file_get_html('https://twitter.com/' . $username); $i = '0'; foreach ($html->find('li.expanding-stream-item') as $article) { //  li  $item['text'] = $article->find('p.js-tweet-text', 0)->innertext; //     html  $item['time'] = $article->find('small.time', 0)->innertext; //    html  $articles[] = $item; //    $i++; if ($i == $maxpost) break; //   }
      
      







メッセージ出力


  for ($j = 0; $j < $maxpost; $j++) { echo '<div class="twitter_message">'; echo '<p class="twitter_text">' . $articles[$j]['text'] . '</p>'; echo '<p class="twitter_time">' . $articles[$j]['time'] . '</p>'; echo '</div>'; }
      
      







ご清聴ありがとうございました。 私はそれが知覚のために非常に難しいと簡単にうまくいかなかったことを願っています。



同様のライブラリ


htmlSQL - Chesnovichに感謝

Zend_Dom_Query-ありがとう

phpQuery - theRavelに感謝

QueryPath - ZonD80に感謝

DomCrawler(Symfony) -ありがとう

CDom-著者への感謝

悪名高いXPath - KAndyを思い出させてくれてありがとう



PS

Groove habrozhitelは、 同様の材料がすでに存在することを促しました

PPS

空き時間には、すべてのライブラリを収集し、使用のパフォーマンスと快適さに関する要約データをコンパイルしようとします。



All Articles