Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8691

[質問]jsで取得したデータをデータベースに保存する方法

$
0
0

前提・実現したいこと

・自身プログラミング経験が浅いため、お伝えする内容に不備や、漏れがあれば
ご指摘いただいても大丈夫です

[実現したいこと]

・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

ご協力の程、お願い致します。


Viewing all articles
Browse latest Browse all 8691

Trending Articles