###前提・実現したいこと
・自身プログラミング経験が浅いため、お伝えする内容に不備や、漏れがあれば
ご指摘いただいても大丈夫です
###[実現したいこと]
・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
ご協力の程、お願い致します。