KDP(電子出版)のメモ 急急如律令

Amazon Kindleダイレクト・パブリッシングでの電子出版や電子書籍の作成販売について、文章やイラストの作成や編集方法について書いています。

最近のサイトはクローラー対策されているのでpuppeteerを使ってみた

 puppeteerはブラウザを操作できるNode.js のライブラリです。httpでリクエストすると弾いてくるサイトが増えているので、ブラウザ操作で回避しようと思う。

puppeteer内にもDOM操作はできるが、HTMLをダウンロードしてjsdomでDOMパースする方法を使っている。そのほうがエラー箇所の特定がしやすい。puppeteerを使っていてもtimeoutエラーが出るので、timeoutエラーが出たときにリトライすることで、エラーを回避する。puppeteerのいいところはasync/awaitで同期処理的にかけるのでプログラムが書きやすい。 puppeteerはブラウザを起動するための時間がどうしてもかかる。

 

公式ページからの使い方としてhttps://example.comにアクセスして、スクリーンショットを画像として保存する例がある。

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({path: 'example.png'});

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

 

github.com

 

npm i puppeteerでpuppeteerをインストールしたが、そうするとmoduleが一旦削除されて、使っていたパッケージが使用不能になった。

 

htmlを取得するだけでいいので、

        await page.goto(url);

        // htmlを取得
        html = await page.evaluate(() => document.documentElement.outerHTML);

teratail.com