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 = "https://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 = "https://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;

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

2018-07-26
年賀状で「新春」とか書くけど・・・何故なんだろうと8月を目前にした今、疑問に思った。
2018-05-16
PHPで画像のヘッダ情報(?)の「Orientation」を元に画像回転させたい。
2018-03-05
Android Studioをインストール。エミュレータを軽くするトコまで終わらせたかったけど、挫折した。
2018-02-23
プッシュ通知について調べてた時にでてきたServiceWorker。そのServiceWorkerについてのメモ。
2017-12-13
jqueryで取得したDOM要素をオブジェクトじゃなくて、配列で受け取りたい