【取得例16件】PHP Simple HTML DOM ParserでWebスクレイピング
PHPでWebスクレイピングを行うとき、
使ったことがある要素の取得方法を一覧にしました。
導入
PHPでのWebスクレイピングには、「PHP Simple HTML DOM Parser」を使います。
上記の URLにあるソースファイル一式をダウンロード、Zipファイルを展開し、「simple_html_dom.php」ファイルを、ライブラリを読み込むプログラムと同じ階層に配置。
導入は下記記事を参考にしています。
動作環境
- Windows 10
- PHP 7
- xampp
オブジェクトの生成
文字列から生成
$html = str_get_html( '<html><body>Hello!</body></html>' );
URLから生成
$html = file_get_html( 'http://sample.com/' );
HTMLファイルから生成
$html = file_get_html( 'sample.htm' );
書き方の種類
指定のすべての要素を取得
$sample = $html->find('a');
指定の1番目の要素を取得
$sample = $html->find('a', 0);
複数の要素をカンマ区切りで指定
$sample = $html->find( 'a, img' );
タグで取得
h1、h2、h3などは直接タグ指定して要素を取得します。
h2の要素を指定
$sample = $html->find('h2');
i番目の、h2の要素を指定
$sample = $html->find('h2',$i);
title属性のa要素を取得
$sample= $html>find( ‘a[title]’ );
metaタグのitemprop属性がpriceの、contentを取得
具体的には <meta itemprop="price" content="1000">
という要素の、「1000」を取得する。
$sample = $html->find("meta[itemprop='price']", 0)->content;
CSSセレクタで取得
検索結果のスクレイピング時によく使います。
id属性がnameの要素を取得する
$sample = $html->find( '#name' );
i番目の、class属性が「list_name」要素を指定
$sample = $html->find('.list_name',$i);
Class属性が「title」要素の中にあるa要素を指定
$sample = $html->find('.title a');
Class属性が「item」要素の中にある「price」要素を指定
$sample = $html->find('.item .price');
Domからの読み出し
h2の文字列を取得
$sample = $html->find('h2')->plaintext;
アンカーリンクのURL(href要素)を取得
$sample = $html->find('.title a')->href;
アンカーリンクのid要素を取得
$sample = $html->find('.title a')->id;
img要素のsrcを取得
$sample = $html->find('img')->src;
img要素のaltを取得
$sample = $html->find('img')->alt;
メモリのクリーンアップ
最後にオブジェクトをクリアします。
$html->clear();
Discussion