【PHP】HTMLパーサー等のライブラリを使わずに正規表現でスクレイピング

php PHP
この記事は約2分で読めます。

HTMLパーサーを使えば簡単だけど、そんなライブラリを使うことすら面倒と思います。

正規表現を使ってゴリゴリとHTMLから値をとってスクレイピングする書き方をまとめました。

PHPでの正規表現を使う関数

正規表現を使うときは「preg_match」か「preg_match_all」を使います。戻り値がboolなのでif文で使うことが多いです。

preg_match($pattern, $html, $result);
preg_match_all($pattern, $html, $result);

コピペもできる正規表現パターン

使える正規表現のパターンを並べてみます。

//aタグのhrefの値を取りたいとき
$pattern = '@<a href="([^"]*)"@';

//mainクラスのaタグのhrefの値を取りたいとき
$pattern = '@<a class="main" href="([^"]*)"@';

//altが"プログラミング"のimgタグのsrcの値をとりたいとき
$pattern = '@<img alt="プログラミング" src="([^"]*)"@';

//imgタグのsrcの値をとりたいとき(imgタグのすぐ後にsrcがない場合)
$pattern = '@<img(?:.*?) src="([^"]*)"@';

//タイトルを取りたいとき
$pattern = '@<title>(.*)</title>@';

値のとり方

値のとり方はこのように取れます。

 if(preg_match_all('@<a class="hoge" href="([^"]*)"@', $content, $result)){
	echo $result[1][0];
}

スクレイピングのやり過ぎには注意

スクレイピングは上手く使えば、作業効率が上がります。

しかし、スクレイピングするために大量にWebページにアクセスすると、公開しているサーバーの負荷になったり、攻撃していると間違えられることがあるので、自己責任かつ節度を持ちましょう。

この記事を書いた人
Ryu
Ryu
サイト運営者

情シス支援・開発・コンサルを提供するITエンジニア。転職含め10社以上経験。第二新卒から未経験でIT就職。社内SE、システム開発会社、コンサルファーム等を経ている。企画〜運用保守、フロント〜バック・インフラと守備範囲は広い。C#とSQLとSalesforceが得意。

Ryuをフォローする
PHP
スポンサーリンク
タイトルとURLをコピーしました