前提・実現したいこと
・自身プログラミング経験が浅いため、お伝えする内容に不備や、漏れがあれば
ご指摘いただいても大丈夫です
[実現したいこと]
・amazonの商品をスクレイピングで、家電の商品の価格を抽出した情報を
データベースを使用して保存したい
発生している問題
[現状]
・ターミナルにて、npm i puppeteer
puppeteerをインストール
・プロジェクトのディレクトリ内に、test.js
amazonのサイトまでは、いきデータは抽出できているかと
思うのですが、その先が、
どう対応すればいいのかわからず、進めることができません。
データベースは、MySQLを予定しております。
該当のソースコード
・test.js
const puppeteer = require("puppeteer"); (async () => { const browser = await puppeteer.launch({ headless: false, // 動作確認するためheadlessモードにしない slowMo: 500, // 動作確認しやすいようにpuppeteerの操作を遅延させる }); const page = await browser.newPage(); //生活家電のページへ行く。 await page.goto("https://www.amazon.co.jp/%E7%94%9F%E6%B4%BB%E5%AE%B6%E9%9B%BB/b?node=124048011", { waitUntil: "networkidle2", }); //セレクターで指定したノードが表示されるまで待機 await page.waitFor(".a-section.octopus-best-seller-card"); //カテゴリーのリンクを取得(空調・季節家電、キッチン家電など) let category_urls = await page.evaluate((selector) => { let urls = []; document.querySelectorAll(selector).forEach((node, i) => { urls.push(node.href); }); return urls; }, "a.octopus-pc-category-card-v2-category-link"); console.log(category_urls); //上で取得したカテゴリーのURLの中から一つを選ぶ。 let category_url = Math.floor(Math.random() * category_urls.length); category_url = category_urls[category_url]; console.log(category_url); //カテゴリーのIDを取得 let category_id = category_url.replace(/^.*node=/i, "").replace(/&.*/, ""); console.log(category_id); //アマゾンおすすめ商品順 let page_url = "https://www.amazon.co.jp/s?rh=n:" + category_id + "&s=featured-rank"; //アマゾンおすすめ商品のページへいく。 await page.goto(page_url, { waitUntil: "networkidle2", }); //セレクターで指定したノードが表示されるまで待機。 await page.waitFor("#search + *"); //ページから商品の情報を取得。 let items = await page.evaluate((selector) => { let data = []; document.querySelectorAll(selector).forEach((node, i) => { let obj = {}; //商品のタイトルを取得 let title = node.querySelector("a.a-text-normal span.a-text-normal"); title = title.textContent.trim(); obj.title = title; //商品の価格を取得 let price = node.querySelector("span.a-price-whole") || node.querySelector("span.a-color-price"); price = (price && price.textContent.trim()) || ""; obj.price = price; //配列にタイトル、価格のデータを入れたオブジェクトを追加 data.push(obj); }); return data; }, "div.s-result-list div[data-asin][data-uuid]"); //itemsは配列でitems[0].titleでタイトル、items[0].priceで値段を取得。 console.log(items); //ブラウザを閉じる await browser.close(); })()
補足情報(ツールのバージョンなど)
・macOS Catalina バージョン10.15.3使用
・ターミナル使用
・VScode使用
・node.js v13.11.0
・npm 6.13.7
ご協力の程、お願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。