Chromeヘッドレスでスクレイピング Node.jsライブラリpuppeteer使ってみた

仕事の依頼でスクレイピングすることがあってヘッドレスブラウザを使ってみた。

目的

ホテルや病院などの検索WEBサイトから
検索結果の名前、住所、電話番号などCSVで取得する

ヘッドレスブラウザ

以前はPhantomJSが使われたようですが、Chromeのヘッドレスが今年リリースされたようで、実際両方使ってみたけどスピードはChromeの方が早い。

スクレイピングとは

ウェブサイトから情報を抽出するコンピュータソフトウェア技術のこと

ウェブスクレイピング - Wikipedia

Node.jsからChromeのヘッドレスを使うためのライブラリ

chromyだとエラーが出てうまくいかなったし、以下の記事見てpuppeteerを使うことにしました。
ヘッドレスブラウザ(Chrome)を使ってSPAをスクレイピングする - Qiita

puppeteerがこれらのライブラリと一線を画すのは、なんと言っても本家ChromeのDevTool開発チームが作成・メンテナンスしている、という点でしょう。

環境

node v.8.9.1
npm 5.5.1
puppeteer

ソース

参考:puppeteer/search.js at main · puppeteer/puppeteer · GitHub

'use strict';

// puppeteer読込み
const puppeteer = require('puppeteer');
// ファイル読み書きライブラリ
const fs = require('fs');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto(【URL】);
  // スクレイピングするセレクタ
  await page.waitForSelector('#search_result .content');

  const links = await page.evaluate(() => {
    const anchors = Array.from(document.querySelectorAll('#search_result .content'));
    return anchors.map(anchor => anchor.textContent).map(text => text.trim().replace(/\s+/g, ','));
  });
  fs.writeFileSync( "puppeteer.csv" , links.join('\n') );

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


スクレイピングも始めてて、Node.jsもほとんど未経験ですが結構簡単にできました!すごいね~。

TechPlay 女子部の皆様へ謝罪

今回はTechPlay女子部のアドベンチャーカレンダーに参加させて頂きました!
初!アドベンチャーカレンダー!(*^^)v
TECH PLAY女子部 Advent Calendar 2017 - Qiita

ただ、私の担当は12日だったのに・・ずるずるずるるるうzzz
ここまで引き延ばしてすみませんでした。。しかも内容も予告してたのと違う・・
来年は計画的に頑張りまっす。