Node.js+axios+cheerioでWebスクレイピングをしてみた
Oct 16, 2022 16:20 · 1130 words · 3 minute read
普段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で調べたら何でも学べるので、ありがたい世の中ですね。