Node.jsでRequestを使ってWebページをスクレイピングする
WebページをスクレイピングするにはWebサイトからWebページのテキストデータを取得し、取得したテキストデータをHTMLドキュメントとしてDOMを構築し、所望のデータを取得しなければなりません。
これには下のようなモジュールを利用する方法があります。
http(s)
request
cheerio-httpcli
この記事ではrequest
モジュールを利用する方法を取り上げます。
request
モジュールを使ってWebサイトからテキストデータを取得する方法に関しては下の記事を参照してください。
Webサイトからテキストデータを取得するには?
Webサイトからデータを取得するにはデータを取得したいURLに対してHTTP(S)のGETリクエストを送信しなければなりません。 これには下のようなモジュールを利用する方法があります。 http(s) request この記事ではrequestモジュールを利用する方法を取り上げます。 テキストデータの取得
DOMを使用するには下のようなモジュールを利用する方法があります。
jsdom
cheerio
DOMを使用する方法に関しては下の記事を参照してください。
DOMを使用するには?
DOMを使用するには下のようなモジュールを利用する方法があります。 jsdom cheerio d3 この記事ではjsdomモジュールを利用する方法を取り上げます。 DOMの作成 DOMを作成するにはjsdom.jsdom関数を呼び出します。 var jsdom = require('jsdom
DOMを使用するには?
DOMを使用するには下のようなモジュールを利用する方法があります。 jsdom cheerio d3 この記事ではcheerioモジュールを利用する方法を取り上げます。 DOMの作成 DOMを作成するにはcheerio.load関数を使用します。 var cheerio = require('
これらを組み合わせることにより、Webページをスクレイピングすることができます。
サンプルコード1
cheerio
モジュールを利用する例です。
3つ目のコマンドライン引数として与えられたURLからテキストデータを取得し、取得したテキストデータをHTMLドキュメントとしてDOMを構築し、HTMLドキュメントの全てのリンクのURLを取得し、標準出力に出力します。
取得したデータの文字コードがiconv-lite
モジュールがサポートしていないものである場合にはエラーとします。
request-cheerio-scrape.js
var request = require('request');
var mimelib = require('mimelib');
var jschardet = require('jschardet');
var iconvLite = require('iconv-lite');
var cheerio = require('cheerio');
if (process.argv.length < 3) {
console.error('lack argument.');
process.exit(1);
}
request({
url: process.argv[2],
encoding: null
}, function (err, res, data) {
if (err) {
console.error(err);
process.exit(1);
}
else {
if (res.statusCode == 200) {
var encoding = null;
if (res.headers['content-type']) {
encoding = mimelib.parseHeaderLine(res.headers['content-type']).charset;
}
if (!encoding) {
encoding = jschardet.detect(data).encoding;
}
if (encoding && iconvLite.encodingExists(encoding)) {
var $ = cheerio.load(iconvLite.decode(data, encoding));
$('a').each(function (i, elem) {
console.log($(elem).attr('href'));
});
}
else {
console.error('can\'t detect encoding');
process.exit(1);
}
}
else {
console.error('can\'t process.');
process.exit(1);
}
}
});
使用パッケージ
- Request
npm install request
でインストールします。 - mimelib
npm install mimelib
でインストールします。 - JsChardet
npm install jschardet
でインストールします。 - Pure JS character encoding conversion
npm install iconv-lite
でインストールします。 - cheerio
npm install cheerio
でインストールします。
実行結果
C:\work\node>node request-cheerio-scrape.js http://kiznaiver.jp/
/?from=lower
/news/
/story/
/onair/
/staff-cast/
/character/
/music/
/movie/
/special/
/goods/
/blu-ray_dvd/
http://hibiki-radio.jp/description/kizna/detail
https://twitter.com/kiznaiver
https://www.instagram.com/kiznaiver/
http://www.pixiv.net/special/kiznaiver/
/?from=lower
news/
./news/?article_id=38263
./news/?article_id=38259
./news/?article_id=38258
https://app.aniplex.co.jp/kiznaiver/
special/kiznavi/
special/kiznatalk/
https://twitter.com/kiznaiver
https://twitter.com/kiznaiver
http://luluco.tv/
http://uspi.jp/
/?from=lower
/news/
/story/
/onair/
/staff-cast/
/character/
/music/
/movie/
/special/
/goods/
/blu-ray_dvd/
http://hibiki-radio.jp/description/kizna/detail
https://twitter.com/kiznaiver
https://www.instagram.com/kiznaiver/
http://www.pixiv.net/special/kiznaiver/
http://twitter.com/share?url=http://kiznaiver.jp/&text=TRIGGERオリジナルTVアニメーション「キズナイーバー」2016年4月よりTOKYO MX、ABC朝日放送、BS11他にて放送開始&hashtags=kizna
http://www.facebook.com/share.php?u=http://kiznaiver.jp/
http://b.hatena.ne.jp/entry/http://kiznaiver.jp/
http://www.aniplex.co.jp/support/user.html
http://www.aniplex.co.jp/help/site.html
http://www.aniplex.co.jp/help/privacy.html
関連

スポンサーリンク