【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

フリーランスエンジニア。転職含め9社経験。第二新卒から未経験でIT就職。社内SEとSIerのSEで働き、企画〜運用保守、フロント〜バック・インフラとフルスタックな守備範囲。C#とSQLとSalesforceが得意。

Ryuをフォローする
PHP
スポンサーリンク