プログラミング逆引き辞典

~ 多言語対応のプログラミングレシピ ~

PHPでスクレイピング

■PHPでスクレイピングする方法を解説する

 
 
①下記にアクセスし、「simple_html_dom.php」ファイルをダウンロード
https://sourceforge.net/projects/simplehtmldom/files/

 
 


 
②スクレイピングコードを記述するPHPファイルと同じディレクトリに①を格納し、下記コマンドで「simple_html_dom.php」ファイルを呼び出す


<?php
require_once('simple_html_dom.php');

 
 


 
③オブジェクトを作成し、スクレイピング対象のURLを読み込む


<?php
require_once('simple_html_dom.php');
 
//オブジェクト作成
$dom = new simple_html_dom();
//スクレイピング対象のURLを読み込む
$dom->load_file('https://www.jma.go.jp/jp/yoho/');

※load_file()メソッドは「URL」や「ファイル名」を指定することができる
一方、load()メソッドの場合は引数に文字列を指定することができる
例)$dom->load(‘<h1>タイトル<strong>強調</strong></h1>’)
 
 


 
④スクレイピング対象ページの要素を取得し、変数に格納後、出力
要素の取得方法はCSSやJQueryと同じようにID要素なら「#<ID要素名>」、クラス要素なら「.<クラス要素名>」で指定できる


<?php
require_once('simple_html_dom.php');
 
//オブジェクト作成
$dom = new simple_html_dom();
//スクレイピング対象のURLを読み込む
$dom->load_file('https://www.jma.go.jp/jp/yoho/');
 
//sideクラスの1つ目の要素を取得し、変数に格納
$header_menu = $dom->find('.side', 0);
//出力
echo $header_menu;

 
 


 
⑤sideクラスの要素を全て取得し、変数に格納後、出力


<?php
require_once('simple_html_dom.php');
 
//オブジェクト作成
$dom = new simple_html_dom();
//スクレイピング対象のURLを読み込む
$dom->load_file('https://www.jma.go.jp/jp/yoho/');
 
//sideクラスの1つ目の要素を取得し、変数に格納
$header_menu = $dom->find('.side', 0);
//出力
echo $header_menu;
 
//sideクラスの要素を全て取得し、変数に格納
$header_menu_all = $dom->find('.side');
//プレーンテキスト出力
foreach ($header_menu_all  as $result) {
  echo '<p>' . $result->plaintext . '</p>';
}

 
気象庁のサイトを⑤のソースコードでスクレイピング
※赤枠がsideクラス

⇒出力結果

 
 


 
⑥その他、出力方法の種類


<?php
require_once('simple_html_dom.php');
 
$dom = new simple_html_dom();
$dom->load('<h1>タイトル<strong>強調</strong></h1>');
 
//plaintext:タグを除いて出力
echo $dom->find('h1', 0)->plaintext;  //タイトル強調
 
//innertext:指定したタグの中身がHTMLタグ込みで出力
echo $dom->find('h1', 0)->innertext;  //タイトル<strong>強調</strong>
 
//outertext:指定したタグとその中身がHTMLタグ込みで出力
echo $dom->find('h1', 0)->outertext;  //<h1>タイトル<strong>強調</strong></h1>

 
取得の際に番号を指定しない場合は配列となる
その場合はforeach文を使用して出力する必要がある


foreach ($dom as $e) {
    echo $e->plaintext . '<br>'; 
}