前提・実現したいこと
[実現したいこと]
・amazonの商品を取得したい。
該当のソースコード
test.js
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({
headless: false,
slowMo: 500
})
const page = await browser.newPage()
await page.goto('https://www.amazon.co.jp/')
await browser.close(item)
})()
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
こんにちは、
サンプルのコードを載せておきます。
Node
1const puppeteer = require("puppeteer"); 2 3(async () => { 4 const browser = await puppeteer.launch({ 5 headless: false, // 動作確認するためheadlessモードにしない 6 slowMo: 500, // 動作確認しやすいようにpuppeteerの操作を遅延させる 7 }); 8 const page = await browser.newPage(); 9 10 //生活家電のページへ行きます。 11 await page.goto("https://www.amazon.co.jp/%E7%94%9F%E6%B4%BB%E5%AE%B6%E9%9B%BB/b?node=124048011", { 12 waitUntil: "networkidle2", 13 }); 14 15 //セレクターで指定したノードが表示されるまで待ちます。 16 await page.waitFor(".a-section.octopus-best-seller-card"); 17 18 //カテゴリーのリンクを取得します。(空調・季節家電、キッチン家電など) 19 let category_urls = await page.evaluate((selector) => { 20 let urls = []; 21 document.querySelectorAll(selector).forEach((node, i) => { 22 urls.push(node.href); 23 }); 24 return urls; 25 }, "a.octopus-pc-category-card-v2-category-link"); 26 console.log(category_urls); 27 28 //上で取得したカテゴリーのURLの中から一つを選びます。 29 let category_url = Math.floor(Math.random() * category_urls.length); 30 category_url = category_urls[category_url]; 31 console.log(category_url); 32 33 //カテゴリーのIDを取得 34 let category_id = category_url.replace(/^.*node=/i, "").replace(/&.*/, ""); 35 console.log(category_id); 36 37 //アマゾンおすすめ商品順 38 let page_url = "https://www.amazon.co.jp/s?rh=n:" + category_id + "&s=featured-rank"; 39 40 //アマゾンおすすめ商品のページへ行きます。 41 await page.goto(page_url, { 42 waitUntil: "networkidle2", 43 }); 44 45 //セレクターで指定したノードが表示されるまで待ちます。 46 await page.waitFor("#search + *"); 47 48 //ページから商品の情報を取得します。 49 let items = await page.evaluate((selector) => { 50 let data = []; 51 document.querySelectorAll(selector).forEach((node, i) => { 52 let obj = {}; 53 //商品のタイトルを取得 54 let title = node.querySelector("a.a-text-normal span.a-text-normal"); 55 title = title.textContent.trim(); 56 obj.title = title; 57 58 //商品の価格を取得 59 let price = node.querySelector("span.a-price-whole") || node.querySelector("span.a-color-price"); 60 price = (price && price.textContent.trim()) || ""; 61 obj.price = price; 62 63 //配列にタイトル、価格のデータを入れたオブジェクトを追加 64 data.push(obj); 65 }); 66 return data; 67 }, "div.s-result-list div[data-asin][data-uuid]"); 68 69 //itemsは配列でitems[0].titleでタイトル、items[0].priceで値段を取得できます。 70 console.log(items); 71 72 //forEachでまわして何かしらしてください。 73 items.forEach((item) => { 74 let title = item.title; 75 let price = item.price; 76 }); 77 78 //ブラウザを閉じる 79 await browser.close(); 80})(); 81
投稿2020/06/02 10:39
総合スコア806
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/03 19:00