他サイトのソースコードを読み込むクローラーを作成するPHP

更新日:2021年12月19日

Googleはクローラーというロボットを使って、世界中にあるWebサイトの情報を集めてランキング化して、それを検索結果として表示しているというのはSEO業界では有名な話です。
クローラーとはWebサイトのソースコードを自動で読み取るロボットなのですが、今回はそれをPHPで作成する方法のご紹介です。
クローラーを自作して、他サイトのソースコードから指定した情報を取得してみましょう。
注意点として、実際クローラーの作成により対象のサイトに負荷をかけて逮捕された例もあるようです。悪用は勿論厳禁ですし、使い方を誤ると犯罪になる可能性があるので使用は自己責任でお願いします。

ライブラリphpQueryをダウンロードする

phpQueryのダウンロードページから最新バージョンをダウンロードします。解凍するとphpQuery-onefile.phpというファイルがあるので、それをphpファイルと同階層に設置して下さい。
このphpQueryを読み込ませることで、jQueryのようにセレクタを指定する事が出来るようになり、取得したい情報を指定しやすくなります。

PHPでWebサイトを読み込む記述をする

早速phpQueryと連携して、Webサイトを読み込む記述を書いていきましょう。
下記のように記述します。

<?php
require_once("phpQuery-onefile.php");

$url = file_get_contents('https://www.web-officer.com/');

$html = phpQuery::newDocument($url);

foreach($html['h1 a'] as $h1_a) {
	$h1_a = $h1_a->getAttribute('href');
	$h1_a_text = "https://www.web-officer.com/" . $h1_a . "
"; echo $h1_a_text; } ?>

なんとこの記述だけで実装完了です。
1つ1つ説明していきましょう!

require_once("phpQuery-onefile.php");
ではライブラリphpQueryの読み込んでいます。これでphpQueryが使えるようになり、セレクタの指定が出来るようになりました。

$url = file_get_contents('https://www.web-officer.com/');
ではURLを指定し、そのURLのHTMLデータを取得しています。
例では当サイトのURLを指定していますが、こちらは任意のURLを記述します。

$html = phpQuery::newDocument($url);
取得したHTMLデータををオブジェクトとして扱う為の記述です。

foreach($html['h1 a'] as $h1_a) {
 $h1_a = $h1_a->getAttribute('href');
 $h1_a_text = "https://www.web-officer.com/" . $h1_a . "<br>";
 echo $h1_a_text;
}
ではh1タグの中にあるaタグに指定してあるリンク先を取得して繰り返し処理で書き出しています。
"https://www.web-officer.com/" . としているのは相対パスでリンク先を指定しているので、絶対パスに変換する為のものになります。

これにて完了です!
実行すると当サイトのh1タグの中にあるaタグのリンクが全て抜き出されます。
今回の例ではh1タグの中にあるaタグのリンクという指定でしたが、勿論他の要素をセレクタで指定すればその情報を取得することが出来るので、応用すれば色んなことが出来ますね。
使用には注意が必要ですので、用途を守った使用をして下さい。