Webサイトから必要な情報を収集ことと言えば、近年流行りのPythonだよね!今回は初心者がPHPで簡単なクローラーを作り、わかりやすくスクレイピングの方法についてご紹介します。
始める前に、WebスクレイピングとWebクローラーの概要を説明します。
Webスクレイピングとは、WebページのHTML内から情報を抽出することです。
Webクローラーとは、一般的にWEB上を巡回してWebサイトの情報を収集するボットプログラムのことを指します。
それでは、始めましょう!
ステップ1
Webページに入力ボックスと送信ボタンを追加します。入力ボックスにWebページのURLを入力できます。
ステップ2
データを抽出するときには正規表現が必要です。
function preg_substr($start, $end, $str) // Regular expression
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
ステップ3
データを抽出するときは文字列分割が必要です。
function str_substr($start, $end, $str) // string split
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
ステップ4
関数を追加し抽出した内容を保存します。
function writelog($str)
{
@unlink("log.txt");
$open=fopen("log.txt","a" );
fwrite($open,$str);
fclose($open);
}
抽出したコンテンツがブラウザに表示されるものと一致しない場合、正しい正規表現を見つけることができません。ここで保存した.txtファイルを開いて正しい文字列を見つけることができます。
function writelog($str)
{
@unlink("log.txt");
$open=fopen("log.txt","a" );
fwrite($open,$str);
fclose($open);
}
ステップ5
画像を抽出したいなら、関数も必要とされます。
function getImage($url, $filename='', $dirName, $fileType, $type=0)
{
if($url == ''){return false;}
//get the default file name
$defaultFileName = basename($url);
//file type
$suffix = substr(strrchr($url,'.'), 1);
if(!in_array($suffix, $fileType)){
return false;
}
//set the file name
$filename = $filename == '' ? time().rand(0,9).'.'.$suffix : $defaultFileName;
//get remote file resource
if($type){
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file = curl_exec($ch);
curl_close($ch);
}else{
ob_start();
readfile($url);
$file = ob_get_contents();
ob_end_clean();
}
//set file path
$dirName = $dirName.'/'.date('Y', time()).'/'.date('m', time()).'/'.date('d',time()).'/';
if(!file_exists($dirName)){
mkdir($dirName, 0777, true);
}
//save file
$res = fopen($dirName.$filename,'a');
fwrite($res,$file);
fclose($res);
return $dirName.$filename;
}
ステップ6
抽出用のコードを書きます。例として、AmazonのWebページを見てみましょう。まず商品のページリンクを入力します。
if($_POST[‘URL’]){
//---------------------example-------------------
$str = file_get_contents($_POST[‘URL’]);
$str = mb_convert_encoding($str, ‘utf-8’,’iso-8859-1’);
writelog($str);
//echo $str;
echo(‘Title:’ . Preg_substr(‘/}*>/’,’//$str));
echo(‘
’);
$imgurl=str_substr(‘var>
始める前に、WebスクレイピングとWebクローラーの概要を説明します。
Webスクレイピングとは、WebページのHTML内から情報を抽出することです。
Webクローラーとは、一般的にWEB上を巡回してWebサイトの情報を収集するボットプログラムのことを指します。
それでは、始めましょう!
ステップ1
Webページに入力ボックスと送信ボタンを追加します。入力ボックスにWebページのURLを入力できます。
ステップ2
データを抽出するときには正規表現が必要です。
function preg_substr($start, $end, $str) // Regular expression
{
$temp = preg_split($start, $str);
$content = preg_split($end, $temp[1]);
return $content[0];
}
ステップ3
データを抽出するときは文字列分割が必要です。
function str_substr($start, $end, $str) // string split
{
$temp = explode($start, $str, 2);
$content = explode($end, $temp[1], 2);
return $content[0];
}
ステップ4
関数を追加し抽出した内容を保存します。
function writelog($str)
{
@unlink("log.txt");
$open=fopen("log.txt","a" );
fwrite($open,$str);
fclose($open);
}
抽出したコンテンツがブラウザに表示されるものと一致しない場合、正しい正規表現を見つけることができません。ここで保存した.txtファイルを開いて正しい文字列を見つけることができます。
function writelog($str)
{
@unlink("log.txt");
$open=fopen("log.txt","a" );
fwrite($open,$str);
fclose($open);
}
ステップ5
画像を抽出したいなら、関数も必要とされます。
function getImage($url, $filename='', $dirName, $fileType, $type=0)
{
if($url == ''){return false;}
//get the default file name
$defaultFileName = basename($url);
//file type
$suffix = substr(strrchr($url,'.'), 1);
if(!in_array($suffix, $fileType)){
return false;
}
//set the file name
$filename = $filename == '' ? time().rand(0,9).'.'.$suffix : $defaultFileName;
//get remote file resource
if($type){
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file = curl_exec($ch);
curl_close($ch);
}else{
ob_start();
readfile($url);
$file = ob_get_contents();
ob_end_clean();
}
//set file path
$dirName = $dirName.'/'.date('Y', time()).'/'.date('m', time()).'/'.date('d',time()).'/';
if(!file_exists($dirName)){
mkdir($dirName, 0777, true);
}
//save file
$res = fopen($dirName.$filename,'a');
fwrite($res,$file);
fclose($res);
return $dirName.$filename;
}
ステップ6
抽出用のコードを書きます。例として、AmazonのWebページを見てみましょう。まず商品のページリンクを入力します。
if($_POST[‘URL’]){
//---------------------example-------------------
$str = file_get_contents($_POST[‘URL’]);
$str = mb_convert_encoding($str, ‘utf-8’,’iso-8859-1’);
writelog($str);
//echo $str;
echo(‘Title:’ . Preg_substr(‘/}*>/’,’/
echo(‘
’);
$imgurl=str_substr(‘var>
※コメント投稿者のブログIDはブログ作成者のみに通知されます