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>';
}