
ビックデータを活用することで、多くの情報をもとにしたビジネスが展開できるため、ニーズに沿った商品・サービスの提供がしやすくなります。しかし、ここで問題となるのは自社に十分なデータを蓄積できていない場合です。
そのような場合に役立つのは、インターネット上に溢れている大量の情報をプログラミングで自動収集するスクレイピングです。
この記事では、PHPでスクレイピングを簡単にできる方法をサンプルコードと一緒に紹介します。
スクレイピングとは
スクレイピングとは、Webスクレイピングの略で、Web上から必要となる特定のデータを収集・抽出して使いやすいように加工することを意味します。
似た言葉にクローリングがあり、これはWeb上のデータをプログラミングが自動的に巡回しながら収集する手法のことです。例えば、Googleの検索順位を決定するためにWebページの情報を収集するGoogleクローラーが有名です。
PHPがスクレイピングに適している理由
スクレイピングをしたくても何から始めればよいのかわからない方もいるでしょう。
そのような方におすすめなのは、「PHP」でスクレイピングをすることです。なぜなら、簡単に実装できるライブラリや標準機能があるためです。それらについて簡単に解説します。
PHPQueryとは
PHPQueryとは、Web上のHTML情報を収集したり、解析したりする機能を簡単に実装できるライブラリのことです。PHPでスクレイピングをするための有名なライブラリですが、2009年より更新が止まっており現在のPHPのバージョンに対応していません。そのため、今回はPHPQueryを使わない方法にします。
おすすめはDOMDocument
PHPの初心者の方にとってはPHPQueryのようなライブラリを追加したり、PHPのバージョンを調整したりすることはハードルが高い作業でしょう。そこで、今回は誰でも体験できるように標準で使えるDOMDocumentを利用してスクレイピングする方法を紹介します。
DOMとは、Document Object Modelの略で「ドキュメントを物として扱うモデル」を意味します。プログラムを介することで、HTMLやXMLといったWebの構成要素に対して、文字色やサイズの変更などを自由に操作できます。
DOMDocumentとは、DOM全体を統括するために必要なドキュメントです。DOMの値を編集する場合は、必ずDOMDocument内に定義してから行います。以下のサンプルコードのようにDomDocumentクラスのloadHTMLクラスを利用することで、HTMLファイルの内容を簡単に取り込めます。
<?php
$dom = new DOMDocument(); //DOMオブジェクトを新規に作成する
$html = file_get_contents("https://xxxx.xxx.xxxx/"); //データを抽出したいURLを入力する
$dom->loadHTML($html); //$htmlに指定したHTMLの内容を$domに取り込む
?>
取り込んだ内容を必要に応じて抽出することで、スクレイピングが可能です。
また、PHPを実行できる環境がない方は、XAMPPをインストールすることで簡単に自宅のパソコンでもPHPが使えるようになります。ぜひお試しください。
PHPでスクレイピングをしてみよう

PHPを実行できる環境が整ったところで、スクレイピングに挑戦してみましょう。今回は、PigDataのWebサイトからデータを収集する以下の2つのサンプルコードを紹介します。
サンプルコードを変更することで、HTML・XMLの様々な情報が取得できます。サンプルコードを実行した結果や変更するポイントについても解説します。
タイトルを抽出するサンプルコード
Webサイトのタイトルは、基本的に1ページに1つしかありません。そのため、タイトルを抽出するサンプルコードは以下のとおりです。
<html>
<?php
$dom = new DOMDocument('1.0', 'UTF-8');
$html = file_get_contents("https://pig-data.jp/usecase/pigexample16/");//データを抽出したいURLを入力
@$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
echo $xpath->query("//title")->item(0)->nodeValue; //タイトルを抽出して出力
?>
</html>
上記は、スクレイピングするための最も基本的なコードになります。4行目でデータ抽出したいURLを指定して、1つのデータを抜き出しています。(今回指定したURL:「PDFデータをCSVに変換!スクレイピングで収集もデータ整形も!」)
実行した結果は以下のとおりです。
このように、タイトルだけが表示されます。7行目のtitleを変更することで、他のタグの情報を抽出することも可能です。いろいろと試してみてください。
H2を抽出するサンプルコード
次に、H2を抽出するPHPのサンプルコードを紹介します。H2であれば、タイトルとは異なり1ページで何度も使われるためforeachを利用するのが有効です。サンプルコードは以下のとおりです。
<html>
<?php
$dom = new DOMDocument('1.0', 'UTF-8');
$html = file_get_contents("https://pig-data.jp/usecase/pigexample16/");
@$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
foreach($xpath->query('//h2') as $node){ //h2の部分を変更することで他のタグなど指定が可能
echo "<p>";
echo $node->nodeValue; //h2の内容を1つずつ表示させる
echo "</p>";
}
?>
</html>
サンプルコードを実行した結果は、以下のとおりです。
1つ目のサンプルコードとは違い、複数のデータを抽出したことがわかります。サンプルコードを変更する場合は、8行目のh2を好きなタグに設定してみてください。
さらに高度な収集をするためには
今回は、指定したURL・タグのデータを抽出するサンプルコードを紹介しました。しかし、さらに高度なスクレイピングを望んでいる方もいるでしょう。そのような方は、正規表現やデータベースなどを駆使することで、より高度なデータ収集が実現できます。
スクレイピングの注意点
PHPでも簡単にスクレイピングが実現できることを紹介してきましたが、実行する際には注意が必要です。それは、データ収集先からサイトの利用規約違反や、業務妨害として訴えられる可能性があることです。
スクレイピングはプログラミングにより自動でデータ収集するため、通常利用ではありえないほどのアクセスになることがあります。つまり、過度なスクレイピングにより、サーバーダウン・通信障害などを発生しかねません。そのようなトラブルにならないためにも、関係する法律についても知識を深めると良いでしょう。
まとめ
PHPを利用することで、個人でも簡単にスクレイピングでデータ収集を行えます。また、紹介したサンプルコードを改造することで、自動化・高度化、さらにはデータ分析・加工をすることも可能です。
このように、スクレイピングはネット上の情報を集めるには非常に有効な手段ですが、プログラミングが不得意な方にとっては難しいと感じるかもしれません。また、プログラミングが得意であっても、法律に抵触する可能性があるため尻込みしている人もいるでしょう。
そこで、おすすめをしたいのはスクレイピング代行サービスです。プロに任せることで、欲しいデータや情報の加工、法律の問題もクリアできます。PigDataは、ツールでは取得できないサイトから、SNS、大容量データの収集・分析が可能です。ぜひご相談ください。