質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Q&A

解決済

1回答

399閲覧

スクレイピングで、情報を取得

medalot

総合スコア4

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

0グッド

1クリップ

投稿2020/06/02 01:57

編集2020/06/15 07:58

前提・実現したいこと

[実現したいこと]
・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ページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

fake_shibe

総合スコア806

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

medalot

2020/06/03 19:00

fake_shibeさん。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問