情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでcheerio-httpcliを使ってWebページをスクレイピングする

WebページをスクレイピングするにはWebサイトからWebページのテキストデータを取得し、取得したテキストデータをHTMLドキュメントとしてDOMを構築し、所望のデータを取得しなければなりません。

これには下のようなモジュールを利用する方法があります。

  • http(s)
  • request
  • cheerio-httpcli

この記事ではcheerio-httpcliモジュールを利用する方法を取り上げます。


cheerioHttpcli.fetch関数を呼び出します。

var cheerioHttpcli = require('cheerio-httpcli');

cheerioHttpcli.fetch('xxx', {
    foo: 'xxx', 
    bar: 'yyy'
}, 'zzz', function (err, $, res, data) {
});

第1引数にWebページのURLを指定します。

第2引数にクエリ文字列を表すオブジェクトを指定します。この引数は指定しなくても構いません。

このオブジェクトではクエリ文字列のキーをプロパティ名とし、値をプロパティの値とします。クエリ文字列に同一のキーが複数存在する場合にはプロパティの値はそれらの値を全て含む配列とします。

第3引数にWebページの文字コードを指定します。この引数は指定しなくても構いません。この引数を指定した場合にはWebページの文字コードは指定した文字コードとなり、指定しなかった場合には自動判定されます。

第4引数にコールバック関数を指定します。この関数の第1引数はエラーオブジェクトであり、第2引数はWebページに対応する、cheerioモジュールにおけるHTMLドキュメントを表すオブジェクトをcheerio-httpcliモジュールが独自拡張したものであり、第3引数はWebページを取得した際の、http.IncomingMessageクラスのインスタンスをcheerio-httpcliモジュールが独自拡張したものであり、第4引数はWebページの、文字コードをutf-8に変換したテキストデータです。

cheerioモジュールの使い方に関しては下の記事を参照してください。

サンプルコード1

3つ目のコマンドライン引数として与えられたURLのWebページの全てのリンクのURLを標準出力に出力します。

cheerio-httpcli.js

var cheerioHttpcli = require('cheerio-httpcli');

if (process.argv.length < 3) {
    console.error('lack argument.');
    process.exit(1);
}

cheerioHttpcli.fetch(process.argv[2], function (err, $, res) {
    if (err) {
        console.error(err);
        process.exit(1);
    }
    else {
        $('a').each(function (i, elem) {
            console.log($(elem).attr('href'));
        });
    }
});

使用パッケージ

  • cheerio-httpcli
    npm install cheerio-httpcliでインストールします。

実行結果

C:\work\node>node cheerio-httpcli.js http://bang-dream.com/
http://x5.nengu.jp/bin/gg?06622530K
http://bang-dream.com
http://bang-dream.com/news
ON AIR
STAFF&CAST
STORY
http://bang-dream.com/blu-ray http://bang-dream.com/cd
CHARACTER
http://bang-dream.com/event http://bang-dream.com/comic
SPECIAL
BIOGRAPHY
http://bang-dream.com/goods http://bang-dream.com/english
special https://twitter.com/bang_dream_info https://twitter.com/bang_dream_info https://twitter.com/bang_dream_info https://twitter.com/bang_dream_info http://bang-dream.com/english http://bang-dream.com/news
ON AIR
STAFF&CAST
STORY
http://bang-dream.com/blu-ray http://bang-dream.com/cd
CHARACTER
http://bang-dream.com/event http://bang-dream.com/comic
SPECIAL
BIOGRAPHY
http://bang-dream.com/goods http://bang-dream.com/cd/ https://bang-dream.bushimo.jp/ http://bang-dream.com/blu-ray/ http://gekkan-bushi.com/tv/ http://gekkan-bushi.com/ http://ws-tcg.com/products/bang_dream http://hibiki-radio.jp/description/poppin-radio/detail
月刊ブシロード2017年3月号発売!表紙&巻頭特集はBanG Dream!両面ポスター付!
月刊ブシロード2017年3月号発売!表紙&巻頭特集はBanG Dream!両面ポスター付!
ワンダーフェスティバル2017[冬]会場内 『 WONDERFUL HOBBY LIFE FOR YOU!! 25』
ワンダーフェスティバル2017[冬]会場内 『 WONDERFUL HOBBY LIFE FOR YOU!! 25』
BanG Dream! 4th LIVE
BanG Dream! 4th LIVE
BanG Dream! ハイレゾ対応ヘッドホン発売決定!
BanG Dream! ハイレゾ対応ヘッドホン発売決定!
完全新作OVA制作決定&TVアニメBlu-ray Vol.7へ収録!新作OVA舞台挨拶付き先行上映会も決定!
完全新作OVA制作決定&TVアニメBlu-ray Vol.7へ収録!新作OVA舞台挨拶付き先行上映会も決定!
STORY
STORY
SPECIAL
SPECIAL
http://bang-dream.com/cd/ http://bang-dream.com/cd/ http://bang-dream.com/cd/ http://bang-dream.com/cd/
BanG Dream! 3rd☆LIVE Sparklin’ PARTY 2017! ライブ・ビューイング当日券販売!
BanG Dream! 3rd☆LIVE Sparklin’ PARTY 2017! ライブ・ビューイング当日券販売!
http://bang-dream.com/update http://bang-dream.com/cd/ https://bang-dream.bushimo.jp/ http://bang-dream.com/blu-ray/ http://gekkan-bushi.com/tv/ http://gekkan-bushi.com/ http://ws-tcg.com/products/bang_dream http://hibiki-radio.jp/description/poppin-radio/detail https://twitter.com/bang_dream_info https://twitter.com/bang_dream_info https://twitter.com/bang_dream_info https://twitter.com/bang_dream_info http://bang-dream.com/english http://bushiroad.com/ http://over-lap.co.jp/ http://www.bushiroad-music.com http://s.mxtv.jp/ http://www.goodsmile.jp http://www.horipro.co.jp/ http://bang-dream.com/news
ON AIR
STAFF&CAST
STORY
CHARACTER
http://bang-dream.com/cd http://bang-dream.com/event http://bang-dream.com/comic
SPECIAL
https://twitter.com/share index.php

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js