Simple HTML DOM Parserのサンプル

2011/04/21

Simple HTML DOM Parserを使った解析のサンプル。

htmlソースのDOM化

urlから直接取れば良いんだけど文字化けすることもあるので一手間かける。

  1. // simple_html_dom.phpファイルの読み込み
  2. include_once('simple_html_dom.php');
  3.  
  4. // UTF-8で処理 – 他の文字コード処理するかもしれないからdefineしておく。
  5. define("CHAR_SET","UTF-8");
  6.  
  7. // 文字化け対策のおまじない的(?)なもの。
  8. mb_language("Japanese");
  9.  
  10. // 解析したいURL。ファイル名でも可。
  11. $url = "http://tips.recatnap.info/";
  12.  
  13. // [$url]からファイルの中身を取得
  14. $sorce = file_get_contents( $url );
  15.  
  16. // [$sorce]をエンコード(?) – 文字化け対策
  17. $sorce = mb_convert_encoding($sorce, CHAR_SET, "auto");
  18.  
  19. // [$sorce]をDOM化。
  20. $gHtml = str_get_html($sorce);

直書きの(?)HTMLソースをDOM化

  1. // simple_html_dom.phpファイルの読み込み
  2. include_once('simple_html_dom.php');
  3.  
  4. // UTF-8で処理 – 他の文字コード処理するかもしれないからdefineしておく。
  5. define("CHAR_SET","UTF-8");
  6.  
  7. // 文字化け対策のおまじない的(?)なもの。
  8. mb_language("Japanese");
  9.  
  10. // HTMLソース
  11. $sorce = "<html>xxxxx</html>";
  12.  
  13. // [$sorce]をエンコード(?) – 文字化け対策
  14. $sorce = mb_convert_encoding($sorce, CHAR_SET, "auto");
  15.  
  16. // [$sorce]をDOM化。
  17. $gHtml = str_get_html($sorce);

色々取得

「htmlソースの取得」で作った「$gHtml」を使う。

aタグのhref属性の値の全部を配列へ

bodyタグ内にあるaタグのhref属性を全部取得。

  1. if( count($gHtml->find('body a')) > 0){
  2.   // bodyタグのaタグの個数が0個超過(1個以上)の場合
  3.   $tag = $gHtml->find('body a');
  4. }else{
  5.   echo 'bodyタグ内のaタグは0個以下' . "\n";
  6.   return FALSE;
  7. }
  8.  
  9. $href = array();
  10.  
  11. foreach ( $tag as $val ){
  12.   $href[] = $val->href . "\n";
  13. }

imgタグのalt属性であれこれと分類

  1. if( count($gHtml->find('body img')) > 0){
  2.   // bodyタグのimgタグの個数が0個超過(1個以上)の場合
  3.   $tag = $gHtml->find('body img');
  4. }else{
  5.   echo 'bodyタグ内のimgタグは0個以下' . "\n";
  6.   return FALSE;
  7. }
  8.  
  9. $alt = array();
  10.  
  11. foreach ( $tag as $val ){
  12.   if( !isset($val->alt) ){
  13.     echo 'alt属性が存在しない' . "\n";
  14.   }else if( $val->alt == null ){
  15.     echo 'alt属性の値は何も入っていない' . "\n";
  16.   }else if( isset($val->alt) ){
  17.     // alt属性に値が入っている。
  18.     $alt[] = $val->alt;
  19.   }
  20. }

1つめのh2タグの文字を取得

  1. if( count($gHtml->find('body h2')) > 0){
  2.   // bodyタグのh2タグの個数が0個超過(1個以上)の場合
  3.   $tag = $gHtml->find('body h2', 0);
  4.   // ※2番目が欲しければ「$tag = $gHtml->find('body h2', 1);」とする。
  5. }else{
  6.   echo 'bodyタグ内のh2タグは0個以下' . "\n";
  7. }
  8.  
  9. $h2 = $tag->plaintext;

その他

回りくどいことはせずにタグなしの状態にして取得

「htmlソースの取得」と違うのは最後の行だけ。
「$sorce」に直接HTMLファイルを書き込むのもOK。

  1. // simple_html_dom.phpファイルの読み込み
  2. include_once('simple_html_dom.php');
  3.  
  4. // UTF-8で処理 – 他の文字コード処理するかもしれないからdefineしておく。
  5. define("CHAR_SET","UTF-8");
  6.  
  7. // 文字化け対策のおまじない的(?)なもの。
  8. mb_language("Japanese");
  9.  
  10. // 解析したいURL。ファイル名でも可。
  11. $url = "http://tips.recatnap.info/";
  12.  
  13. // [$url]からファイルの中身を取得
  14. $sorce = file_get_contents( $url );
  15.  
  16. // [$sorce]をエンコード(?) – 文字化け対策
  17. $sorce = mb_convert_encoding($sorce, CHAR_SET, "auto");
  18.  
  19. // [$sorce]からタグを取り除いたテキストのみ。
  20. $gHtml = str_get_html($sorce)->plaintext;

新着(ニュース関連以外)

2017-07-19
折れ線グラフをもう少しゆるやかに・・・というか何というか・・・調べていくと「移動平均」っていう言葉にたどり着いた
2017-07-10
FuelPHPの1.8をダウンロードして使っていたらセッションが使えないということに気付いた。
2017-06-27
MACにWin10をインストールしてみた:再挑戦。
2017-06-25
「簡単」っていうヤツらが多いけど・・・難しいぞ。
2017-06-06
FuelPHPのOILでtry・catchを使ったらエラーになった。