PHPでHTMLをパーサーにかけてスクレイピング

Androidアプリを作ってみたい!araishiです。

いきなりなんですが、
たくさんのコンテンツを掲載しているWEBサイトが、
APIを公開してたらそれを使って、何か作りたくなっちゃいますね!

しかし、そのサイトがAPIを公開してなかったら場合はどうしましょう。
コピペして作っていくのは大変です。

そこでWEBスクレイピング!

APIを使うようにWEBサイトのコンテンツを利用するワザをWEBスクレイピングといいます。

スクレイピングとは、WEBサイトのHTMLデータを解析して、
必要なデータを抽出することで保存することです。

しかし・・・、ほかの人の作ったHTMLデータなどを、勝手に保存してもいいんでしょうか!?

著作権で保護された情報などを保存するのは、グレーな気がしましたが、 Googleを例に考えてみました!

Googleもスクレイピングしている!

Googleの検索エンジンで何か検索した時に表示される内容は、
検索した時に表示される結果は、スクレイピングされたものなんですね!

Googleの検索エンジンは、クローラーというプログラムを使用し、
WEBサイトを巡回させて、HTMLのソースコードを保存しているんです。
ということでスクレイピングを明示的に禁止しているサイト(wikipediaなど)を除いては、
スクレイピングしてもよさそうです。

PHPでスクレイピングをする方法を探してみました。

PHP Simple HTML DOM Parser

PHP5で使えるスクレイピングライブラリです。
ファイルを1つだけ読込すれば使えて便利。

・使用方法

<?php
include 'simple_html_dom.php';
// URLを指定してインスタンスをつくる
$html = file_get_html('http://example.com/');
// 全部の画像を取得して表示
foreach($html->find('img') as $element)
echo $element->src . '<br>';
?>

findメソッドはjQueryのセレクターチックに使うことができます。

<?php
include 'simple_html_dom.php';
// URLを指定してインスタンスをつくる
$html = file_get_html('http://example.com/');
// アンカーを取得
$ret = $html->find('a');
// 1番最初のアンカーを取得
$ret = $html->find('a', 0);
// div id=fooを取得
$ret = $html->find('div[id=foo]');
// class="foo"を取得
$ret = $html->find('.foo');
// アンカーの画像を取得
$ret = $html->find('a, img');
// <table class="hello">の中のtd を取得
$ret = $html->find('table.hello td');
// <table>内の<td align="center">を取得
$ret = $html->find('table td[align=center]');
?>

詳細はドキュメントを参照してください。 http://simplehtmldom.sourceforge.net/

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です