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 でスクレイピングする
公式ドキュメントを読みつつ対象のタグを取得します。
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欲しいものリスト>