PHPスクレイピングでサイト更新作業を簡略化しよう

PHPスクレイピング - cURLテクニック

スクレイピングとは

「スクレイピング」とは、英語で「scrape」=「削る」から作られた造語です。WEBページから必要な部分の情報を取得して利用することを意味しています。

公開されているWEBページ上の情報を自動収集し、主にサイトの更新、データの蓄積等を行うことができます。

近年は膨大なデータを蓄積して利用するAIの「ディープラーニング」でも使用されています。

どのような場面で利用できるか

アダルトアフィリエイトでの活用方法ですが、CRON等を利用して主に更新作業の自動化に利用されます。

他サイトのコンテンツ更新情報・不特定掲示板のコメントの取得等をスクレイピングして1つのコンテンツとして公開することも可能です。

ただ注意してほしい点は、スクレイピング先のページ情報は作成者の著作権によって保護されています。転載禁止のものありますので、取得する情報には注意が必要です。

cURLでのPHPスクレイピングコード

実際に「日本語XVIDEOS」のTOPページから動画名、ページURL、JPG/GIFURLを取得するプログラムを記載します。

<?php
// スクレイピング対象ページURL
$url = "https://www.xvideos.com/lang/japanese";

// ページ内容取得
$ch = curl_init(); // 初期化
curl_setopt($ch, CURLOPT_URL, $url); // オプションを設定
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$line = curl_exec($ch); // 実行
$line = mb_convert_encoding($line,'UTF-8','auto'); // 文字コード変換

// パターン定義(欲しいソースの正規表現を記述)
$pattern="/<img[\s]src=\"(.*?)\"[\s]data-src=\"(.*?)\".*?<a[\s]href=\"(.*?)\"[\s]title=\"(.*?)\">/";

// 抽出変数初期化
$match = array();

// ページ内容からパターン定義にマッチするものを抽出
preg_match_all($pattern, $line, $match, PREG_SET_ORDER);

// マッチした数
$count = count($match);
// マッチした数だけループ
for ($i = 0; $i< $count; $i++) {
	// マッチした内容を変数代入
	$gifurl = $match[$i][1];
	$jpgurl = $match[$i][2];
	$movieurl = $match[$i][3];
	$moviename = $match[$i][4];

	// 取得した動画名、ページURL、GIFURL、JPGURLを表示
	echo "$moviename<br>";
	echo "https://www.xvideos.com/.$movieurl<br>";
	echo "$gifurl<br>";
	echo "$jpgurl<br>";
	echo "<br>";
}
?>

file_get_contentsを使う方法もある

「cURL」ではなく「file_get_contents」を使用する方法もあるが速度は「cURL」のほうが高速なためおすすめです。

一応記載すると上記ソースコード内の「ページ内容取得」部分を下記に変更するだけです。

// ページ内容取得

$line = file_get_contents($url);
$line = mb_convert_encoding($line,'UTF-8','auto');

コードの簡潔性は高いが速度の優位性はないのでどちらを選択するかは好みです。

一度速度を計測したときは「cURL」のほうが「file_get_contents」より2倍高速でした。

正規表現について

狙った情報を取得する際に使用する「正規表現」ですが、

そもそも「正規表現」ってなに?と思われた方もいるかと思いますので簡単に説明しておきます。

「正規表現」とは

様々な文字列を簡略化して1つの文字列(パターン)で表現すること

です。

例えば

abc
abcd
abcde

というアルファベットの文字列があるとしてこれを正規表現で表すと

[a-z]+

と簡潔に表すことができます。

[a-z]は小文字のアルファベット1文字を示し、その後の「+」はそれが「1回以上繰り返し」であることを示します。

この3つの文字列はすべてabcという文字列がはいっているので、その部分は指定することもできます。

abc[a-z]*

「*」が出てきましたが、これは「0回以上繰り返し」であることを示します。

このようにいろいろな文字列を表すパターンを使用して目的の部分をスクレイピングすることができます。

その他色々な表現方法がありますので、気になった方はこちらのサイトをご覧ください。

正規表現チェッカー

正規表現を作成する際に管理人自身がお世話になっているサイト様です。

タイトルとURLをコピーしました