結局その日は活動できず、1時間くらい雑談しているなかで「休館日を監視しよう!」という話になり、スクレイピングで休館日一覧を取得できないか考えた。
サーバサイドで動かしたいので、言語はNode.jsを選択。
しかしNode.jsではDOM操作ができない。そこでcheerio-httpcliをつかってjQueryライクなスクレイピングをしようと思う。
cheerio-httpcliをインストールする
cheerio-httpcliはNode.js用のWebスクレイピングモジュールで、文字コード変換とHTMLをjQueryのように操作できる。
作成者が日本人のため、ドキュメントも全部日本語で書かれている。英語ツライという人にもオススメだ。
ということで、cheerio-httpcliをインストールする。
$ npm i -S cheerio-httpcli
スクレイピングする
東京体育館の休館日をスクレイピングする。
//scraping.js
const client = require('cheerio-httpcli');
client.fetch('https://www.tef.or.jp/mobile/tmg_closure.jsp', (err, $, res) => {
const result = [];
$('.normal_list').each(function (id, el) {
const month = $(this).find('.normal_h2').text();
$(this).find('li').each(function (id, el) {
result.push(month + $(this).text().replace(/\r?\n?/g, ''));
});
});
console.log(result.join('\n'));
});
$ node scraping.js
7月11日(火(Tue)):全施設休館(陸上競技場は7月3日(月)から13日(木)営業休止)
7月12日(水(Wed)):個人利用施設休館
7月13日(木(Thu)):個人利用施設休館
8月28日(月(Mon)):全施設休館
8月29日(火(Tue)):個人利用施設休館
9月14日(木(Thu)):全施設休館(陸上競技場は9月11日(月)から22日(金)営業休止)
クライアントサイドのjQueryを使ったスクレイピングとほぼ同じだ。
注意すべきは1点。$(this)と書きたいのでアロー関数ではなくfunctionを使っている。
jQueryでのスクレイピング、アロー関数とfunctionの違いは以下の記事を参照ください。
以上
written by @bc_rikko
0 件のコメント :
コメントを投稿