TypeScriptでcheerioを使ってスクレイピングする

TypeScript で、cheerio を使ってスクレイピングを実装しました。cheerio は JavaScript 製のスクレイピングライブラリです。axios で HTML を取得したあと、cheerio を使って必要なタグを取得します。

puppeteer のようなヘッドレスブラウザを使う選択肢もあったのですが、AWS Lambda で動かすために処理を軽くしたいこと、SPA なページから取得したいわけではなくシンプルな機能で良いことから cheerio を採用することにしました。

目次

cheerio をインストールする

yarn add --save axios cheerio
yarn add --dev @types/axios @types/cheerio

インストールは問題なく完了したのですが、以下のようにインポートすると VSCode にエラーが表示されました。

import cheerio from "cheerio";

モジュール ‘\”cheerio\”’ は、’esModuleInterop’ フラグを使用して既定でのみインポートできます index.d.ts[331、5]: “このモジュールは ‘export =‘ を使用して宣言されていて、’esModuleInterop’ フラグを使用する場合は既定のインポートでのみ使用できます。

tsconfig.json で esModuleInterop フラグを設定することでエラーは解消します。

"esModuleInterop": true

cheerio でスクレイピングする

公式ドキュメントを読みつつ対象のタグを取得します。

https://cheerio.js.org

const htmlData = await getHtmlData("https://example.com");
const $ = cheerio.load(htmlData);
$("a").each((_i, elem) => {
  const href = $(elem).attr("href");
  if (href?.startsWith("/hoge/")) {
    console.log($(elem).find(".price").first().text());
  }
});





Amazon欲しいものリスト

私が作業中に飲んでいるコーヒーや欲しいマンガなどを集めました。開発・執筆の励みになりますのでクリックして頂ければ幸いです。

<Amazon欲しいものリスト>