Node.js+axios+cheerioでWebスクレイピングをしてみた

Oct 16, 2022 16:20 · 1130 words · 3 minute read JavaScript Node.js Docker

普段WebスクレイピングをするときはPythonを使っています。 JavaScriptやTypeScriptを使う機会をもっと増やしたいので、今回はNode.js + axios + cheerioでのWebスクレイピングを試してみました。

目次

環境

  • Docker Image「node:18.11-alpine3.15」

こんな感じでDocker Containerで動かしました。

$ docker container run -it --name node-scraping-sample1 --mount type=bind,source="$(pwd)"/src/,target=/mnt --rm node:18.11-alpine3.15 ash

トラブルを避けたいので、普段は使い慣れたbullseyeを使うことが多いですが、今回は検証目的でalpineを使ってみました。 今回くらいの軽い用途であれば、alpineに起因したトラブルもありませんでした。Docker Imageのサイズが小さいので、alpineもアリですね。

サンプルコード

今回はこのブログの記事一覧から、記事のタイトルを抜き出してみます。

まずはpackage.jsonを作成し、axiosとcheerioを追加。

npm init
npm i axios cheerio

importを使いたいので、package.jsonに「“type”: “module”,」を追加。
scriptsに「“dev”: “node index.js”」を追加。

{
  "name": "scraping-sample",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "dev": "node index.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "axios": "^1.1.3",
    "cheerio": "^1.0.0-rc.12"
  }
}

サンプルコードがこちら。 「https://blog.kapiecii.com/posts/」にアクセスし、記事タイトル一覧を取得しています。

import axios from 'axios';
import cheerio from 'cheerio';
 
const URL = 'https://blog.kapiecii.com/posts/';
 
axios(URL)
    .then(response => {
        const html = response.data;
        //console.log(html);
        const $ = cheerio.load(html);
 
        $('.post-item', html).each((item, element) => {
            const title = $(element).find('a').text().replace(/(\r\n|\n|\r|)/gm, '').trim();
            console.log(title);
        });
    }).catch(err => console.error(err));

実行結果がこちら

npm run dev

> scraping-sample@1.0.0 dev
> node index.js

2022年9月の振り返りと2022年10月の目標
ChromeやEdgeから情報漏洩を防ぐためにスペルチェック設定を確認しよう
VRワールドを作成して「Cluster」で公開してみた
英語のシャドーイングの効果が確認できるおすすめの無料アプリ
無料教材を使ったシャドーイングで英語のリスニングを強化する
2022年8月の振り返りと2022年9月の目標
2022年のKindle Unlimitedの読書を振り返ってみた
自宅ルータの脆弱性を確認した
自作したオニヤンマ君も虫除けに効果があった
2022年7月の振り返りと2022年8月の目標
帆船型水上ドローンが作る未来
DockerでNext.jsの開発環境を作ったがローカルで開発することにした
VSCodeのRemote Containers + Dockerを試した

(以下、省略)

参考動画

こちらの動画を参考にさせていただきました。



最後に

解説動画を見ながら、サクッと動かすことができました。
YouTubeで調べたら何でも学べるので、ありがたい世の中ですね。

tweet Share