phpでスクレイピングする方法
問題
スクレイピングってどうやるんですか?
答え
WebサイトのHTMLなどの文字列から必要な情報を取得する。
要するに以下のようなことをする。
例)あるURLのページ内に「配達完了」の文字があったら配達完了と判定する。
<?php $hantei = false; $html = file_get_contents('https://www.example.com/xxx?no=123456'); if (preg_match('/配達完了/', $html)) { $hantei = true; }
実際にはHTMLがそう単純でもないため、もう少し対象を限定して、「<td class=”status”>配達完了</td>」の有無を探したり、「<div class=”hoge”>~</div>」の中など条件を限定して、間違った情報を取得しないように考える。
スクレイピングはよくないこと?
ブラウザでアクセスするのもプログラムでアクセスするのも、Webサーバーから見ればそう変わりはなく、スクレイピングそのものは特に悪いことではない。
情報を取得するために大量のアクセスをする、取得した情報を利用規約などに違反する形で利用するなど、相手先に迷惑になることをするのはよくない。
また情報取得先はスクレイピングできることを通常は保証しないので、日々のメンテナンス、リニューアルなどでHTMLの構造が変わり、ある日突然情報が取得できなくなるなどの問題が発生する可能性がある。HTMLの書き方は先方の自由なので、スクレイピングする側の自己責任で対応する必要がある。
アクセス制限も先方の自由なので、迷惑なレベルでアクセスするとアクセス拒否されても仕方がない。
安定した動作が必要な場合は、情報取得のために正式に用意されたAPIなどを利用するのが良い。
コメント