一般社団法人 全国個人事業主支援協会

COLUMN コラム

  • PHPで簡単なスクレイピング(Curl)。
静的なページにしか対応はしていませんが、簡単なスクレイピングのコードを書いたので公開します。
スクレイピングといっても該当URLのHTLMを取得して目的の文字列があるかないかをチェックするだけのコードです。

使い方。
ソースと同じディレクトリに「data.csv」を配置。
※
data.csvは以下のように記載(ID=管理番号、URL=スクレイピングするURL。)
ID,URL
ID,URL
ID,URL
....

実行すると、csvのURLからHTMLを取得して、取得したHTMLに対してコード内で定義している文字列を検索。
検索した結果をoutput.csvに返す仕様です。
※検索文字列が見つかればOK、無ければNGを返します。


/**

<?php
ini_set(‘default_socket_timeout’,3600);
// CSVファイルのパス
$csvFile = $_REQUEST[“file”];
if($csvFile == “”){
$csvFile = ‘data.csv’; // あなたのCSVファイルのパスに置き換えてください
}
//echo $csvFile;
//exit;
// 関数を使ってCSVファイルを読み込む
$rows = [];
if (($handle = fopen($csvFile, “r”)) !== false) {
while (($data = fgetcsv($handle, 5000, “,”)) !== false) {
$rows[] = $data;
}
fclose($handle);
} else {
die(“Failed to open $csvFile”);
}

// スクレイピング結果を格納する配列
$results = [];

// B列のURLをスクレイピングして結果をC列に格納
foreach ($rows as $key => $row) {
if (!isset($row[1])) continue; // B列が存在しない場合のチェック(0-indexedで2列目なので$row[1])
$url = trim($row[1]); // B列のURLを取得し、空白を除去

// URLが空でない場合のみスクレイピングを行う
if (!empty($url)) {
$scrapedResult = scrapeWebsite($url); // スクレイピング関数を呼び出す

// “カートに入れる”が含まれているかチェックして結果を設定
if(strpos($url, ‘shop.lashinbang.com’) !== false){
if (strpos($scrapedResult, ‘add-cart’) !== false) {
$results[$key] = ‘OK’;
} else {
$results[$key] = ‘NG’;
}

} else if(strpos($url, ‘item.fril.jp’) !== false){
if (strpos($scrapedResult, ‘購入に進む’) !== false) {
$results[$key] = ‘OK’;
} else {
$results[$key] = ‘NG’;
}

} else if(strpos($url, ‘paypayfl*******’) !== false){
if (strpos($scrapedResult, ‘購入手続きへ’) !== false) {
$results[$key] = ‘OK’;
} else {
$results[$key] = ‘NG’;
}

} else if(strpos($url, ‘okok****’) !== false){
if (strpos($scrapedResult, ‘<a href=”#inline-content” id=”cartButtonOn” class=”button button_purchase button_cart cboxElement inline”>カートに入れる</a>’) !== false) {//
$results[$key] = ‘OK’;
} else {
$results[$key] = ‘NG’;
}
} else {
//オ◯モール、駿◯屋、ヤ◯◯◯ョッピング
if (strpos($scrapedResult, ‘カートに入れる’) !== false) {
$results[$key] = ‘OK’;
} else {
$results[$key] = ‘NG’;
}
}
}
}

// CSVに結果を書き込む
if (!empty($results)) {
$outputCsvFile = ‘output.csv’; // 出力するCSVファイルのパス(任意の名前)

$outputHandle = fopen($outputCsvFile, ‘w’);
foreach ($rows as $key => $row) {
$result = isset($results[$key]) ? $results[$key] : ”;
fputcsv($outputHandle, [$row[0], $row[1], $result]); // 第1列と第2列はそのまま出力し、第3列に結果を追加
}
fclose($outputHandle);

echo “処理が完了しました。結果は $outputCsvFile に保存されました。”;
} else {
echo “処理対象のURLが見つかりませんでした。”;
}

// スクレイピング関数の例
function scrapeWebsite($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.9999.999 Safari/537.36’); // User-Agentを偽装
curl_setopt($ch, CURLOPT_TIMEOUT, 30); // タイムアウト時間を設定(秒)

$html = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);

if ($error) {
return “Error: ” . $error;
} else {
return $html; // HTML全体を返す
}
}

?>

**/

もしよかったら参考にしてもらえればと思います。※悪用は禁止です。

 

次回は、、動的なページのスクレイピングを書いてみようと思います。

The following two tabs change content below.

nooooo

この記事をシェアする

  • Twitterでシェア
  • Facebookでシェア
  • LINEでシェア