PHP CURLで複数ページのWebページの情報を取得

PHP CURLで表示件数が多く複数にページに渡っているWebページの情報を取得する方法をまとめました。

基本的な部分は下記記事記載の単一Webページの場合と共通で、複数のWebページ取得に関わる部分のみ記載しています。
PHP CURLで検索条件を入力するWebページの情報を取得
 

1)URLのページ番号を示すURLクエリパラメータを確認


 
ブラウザで対象ページを閲覧し、1ページ目から数ページ分表示し、その時のURLを確認します。
 
例)
http://対象サイトのURL/?検索条件&page=2
 
上記例の場合は、ページ数がpage=2のURLクエリパラメータでページ番号を指定しています。
 

2)総件数を示すHTMLを確認


 
全ページ数を知る必要がありますが、全ページ数はWebページ上に表示されていないことがあります。商品や賃貸物件などの総件数は通常表示されるので、総件数を示すHTMLを確認します。
 
PHPコードで正規表現を使って抽出します。
 

3)全体の処理の流れ


 
①PHP CURLで1ページ目のWebページ取得
②正規表現で総件数を取得
③総件数を1ページあたりの表示件数で割り全ページ数を求める。
④ページ数分ループし、複数ページの情報を取得。
 

4)PHP CURLコードの概要


 

$ref = "http://example.com/main";
$target_base = "http://example.com/main/kensaku?xx&page=";

$target = $target_base."1";
curl_setopt($sc, CURLOPT_URL, $target);
curl_setopt($sc, CURLOPT_REFERER, $ref);

$web_page = curl_exec($sc);

preg_match("(・・([0-9]+)件・・)siuU", $web_page, $data_array);//全件数を取得

$total_num = $data_array[1];
$page_total = $total_num / 50 ;//1ページ当りの件数が50の場合
$page_total = ceil($page_total) ;

for ( $page_num = 1; $page_num <= $page_total; $page_num++ ) {
  $target = $target_base.$page_num;
  curl_setopt($sc, CURLOPT_URL, $target);
  $web_page = curl_exec($sc);
         :
         :メイン処理部分
         :
  $ref = $target;//リファラーは一つ前のページのURLを指定
  curl_setopt($sc, CURLOPT_REFERER, $ref);
}
関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください