スクレイピングと言えば、Pythonというスタンダードがありますが、PHPでもスクレイピングができます。
ウェブサイトのタイトルや見出しを抽出したい
ネット上にあるサイトのタイトルを抽出する
例として、ハローワークの公式サイトから必要なデータを取得します。
でスクレイピングを行うのに、便利なものがあります。
DOMは、「Document Object Model」といいモデルの一種です。ライブラリとは違うものです。
Javascriptをやっている方は、DOMと聞いてはっとされた方がいるかもしれませんが、
DOMを介することで、HTMLやXMLといったWebの構成要素に対して、文字色やサイズの変更などを自由に操作できます。
<?php
$dom = new DOMDocument(); //DOMオブジェクトを新規に作成する
$html = file_get_contents("https://www.hellowork.mhlw.go.jp/");
//データを抽出したいURLを入力する
$dom->loadHTML($html);
//$htmlに指定したHTMLの内容を$domに取り込む
?>
これで、スクレイピングをする準備ができました。
タイトルを抽出するコード
<html>
<?php
$dom = new DOMDocument('1.0', 'UTF-8');
$html = file_get_contents("https://www.hellowork.mhlw.go.jp/");
//データを抽出したいURLを入力
@$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
echo $xpath->query("//title")->item(0)->nodeValue;
//タイトルを抽出して出力
?>
</html>
h2タイトルを抽出するコード
<html>
<?php
$dom = new DOMDocument('1.0', 'UTF-8');
$html = file_get_contents("https://www.hellowork.mhlw.go.jp/");
@$dom->loadHTML($html);
$xpath = new DOMXpath($dom);
foreach($xpath->query('//h2') as $node){ //h2の部分を変更することで他のタグなど指定が可能
echo "<p>";
echo $node->nodeValue; //h2の内容を1つずつ表示させる
echo "</p>";
}
?>
</html>
タイトルと見出しが表示しているでしょうか?
人によっては警告(Warning)が出ますが、タイトル、見出しが表示されているはずです。
また、文字コードをUTF-8にしていても、文字化けが起こるようなら、この記事を見てください。
スクレイピングのレベルアップ
さらに高度なスクレイピングをするには、正規表現やデータベースを使う必要があります。
正規表現を使うことによって、きめ細かな条件の下で、より的確なデータを取得できます。
データベースの知識があると、ブラウザ表示だけでなく、データベースまで検索して、より深いデータが取得できます。
の記事を参考にしてください。
スクレイピングを行う上での注意点
ごっそりとってくる機能なので、著作権はもちろんのこと、各サービスの規約を順守する必要があります。
本人が思っている以上に、サーバーに負荷をかけてしまいます。
Google Map Platformのように、データ量の規制もあります。
にほんブログ村
スクレイピング禁止サイトを見分ける方法
規約を見る
利用規約に明示的にスクレイピングを禁止する記載があれば、明らかに禁止されています。
WebAPIが提供されていること
WebAPIを提供している場合、アクセスはWebAPI経由に限られていることが多いです。
robot.txtを見る
コンテンツとともにWebにアップロードされているファイルrobot.txtは、検索エンジンのクローラに対してURLのアクセス可否を記載しています。robot.txtでアクセスが許されていないURLはスクレイピングも禁止されています。
コメント