プロさんのおうち   ~プログラムのサンプル置き場~


Puppeteerでスクレイピング


Puppeteerを利用して、簡単なスクレイピングをしてみます。

Googleで適当な文字列を検索して、結果のタイトル部分を出力します。

ソースコード

今回作成したソースコードは以下にようになります。


const puppeteer = require('puppeteer');

(async () => {
    const browser = await puppeteer.launch({
        headless: true
    });
    // 新規ページを作成後、ページ遷移
    const page = await browser.newPage();
    await page.goto('https://www.google.com/?hl=ja');

    // 検索項目に値を入力し、検索する。
    await page.type('input[title="検索"]', '株式会社PUreatio', { delay: 50 });
    await page.keyboard.press('Enter');

    // 遷移完了を待機する。
    await page.waitForNavigation();

    let hasNext = true
    while(hasNext) {
      // 検索結果のタイトルを取得する。
      const searchResults = await page.$$('h3[class="LC20lb"]');
      for (let result of searchResults) {
          // 検索結果のタイトルを取得する。
          let title = await (await result.getProperty('textContent')).jsonValue();
          console.log(title);
      }

      // 「次へ」のリンクをクリックする。
      let nextLink = await page.$('a[id="pnnext"]');
      if (nextLink !== null) {
          await nextLink.click();

          await page.waitForNavigation();
      } else {
          // 次の検索結果ページがなくなったら処理終了。
          hasNext = false;
      }
    }

    await browser.close();
})();
				

ソースコード上では、Googleで「株式会社PUreatio」を検索しています。

次画面への遷移には、「id = pnnext」のリンクを取得し、クリックすることで遷移します。

最初の検索項目に値を入力して検索ボタンを押下する(今回はEnterを入力しています)ところ、いくつかやり方がありますので載せておきます。


1. 項目をElementHandlerクラスで取得し、Enterを押下する
// 検索項目に値を設定する。
let conditionElement = await page.$('input[title="検索"]')
await conditionElement.type('Test Input');
// Enterを押下することで検索する。
await conditionElement.press('Enter');

2.普通にボタンを押下する。
await page.type('input[title="検索"]', 'PUreatio', { delay: 50 });
await page.click('input[value^="Google"]');

3.普通にボタンを押下するけど、evaluateとか使ってみる。
await page.type('input[title="検索"]', 'PUreatio', { delay: 50 });
await page.evaluate(() => {
    let searchBtn = document.querySelector('input[value^="Google"]');
    searchBtn.click();
});
				
参考URL



メニューに戻る


CopyRight 2019 株式会社PUreatio