2017/08/01

[Node.js]cheerio-httpcliでスクレイピングしてjQueryライクなDOM操作をする

会社ではジョギングサークルに所属していて、東京体育館周辺で活動している。久しぶりに活動に参加しようと東京体育館に行ったところ休館でロッカーが使えなかった。

結局その日は活動できず、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 件のコメント :

コメントを投稿