🌐

【取得例16件】PHP Simple HTML DOM ParserでWebスクレイピング

2020/09/30に公開

PHPでWebスクレイピングを行うとき、
使ったことがある要素の取得方法を一覧にしました。

導入

PHPでのWebスクレイピングには、「PHP Simple HTML DOM Parser」を使います。
https://sourceforge.net/projects/simplehtmldom/files/
 
上記の URLにあるソースファイル一式をダウンロード、Zipファイルを展開し、「simple_html_dom.php」ファイルを、ライブラリを読み込むプログラムと同じ階層に配置。

導入は下記記事を参考にしています。
https://blog.s-giken.net/441.html

動作環境

  • 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