最初の本格案件
創業から数ヶ月、最初に本格的に取り組んだのはECサイトの商品情報を自動収集するスクレイピングツールの開発でした。
クライアントの課題は「楽天・Amazonで毎日手動で価格を調べているが、商品数が多すぎて追いきれない」というものでした。
技術的なアプローチ
// Puppeteerで楽天の検索結果を取得する基本パターン
const puppeteer = require('puppeteer');
async function scrapeRakuten(keyword) {
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
// ユーザーエージェントを設定(クローラーと判定されにくくする)
await page.setUserAgent(
'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36'
);
const url = `https://search.rakuten.co.jp/search/mall/${encodeURIComponent(keyword)}/`;
await page.goto(url, { waitUntil: 'networkidle2' });
const products = await page.$$eval('.searchresultitem', items =>
items.map(item => ({
title: item.querySelector('.title')?.textContent?.trim(),
price: item.querySelector('.price')?.textContent?.trim(),
url: item.querySelector('a')?.href,
}))
);
await browser.close();
return products;
}
学んだこと
レート制限への対応 短時間に大量リクエストを送るとブロックされます。リクエスト間隔を1〜3秒ランダムに設定することで回避できました。
ページネーション処理 「次のページ」ボタンを自動でクリックしながら全ページ収集するロジックの実装に工夫が必要でした。
データの正規化 各ECサイトで価格表示の形式が異なるため、文字列から数値へのパース処理が重要でした。
結果
週次で手動3〜4時間かかっていた調査作業が、完全自動化されました。このプロジェクトがきっかけで、スクレイピング案件の受注が増えていきました。