情報アイランド

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

Node.jsでextract-main-text-nodeを使ってHTMLドキュメントの内容を抽出する

HTMLドキュメントの内容を抽出するには下のようなモジュールを利用する方法があります。

  • unfluff
  • extract-main-text

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


まず、extractMainTextクラスのインスタンスを作成します。

var extractMainText = require('extract-main-text');

var emt = new extractMainText({
    url: 'xxx'
});

第1引数にオプションを指定します。

主なオプションには下のようなものがあります。

  • url・・・HTMLドキュメントのURLを指定します。

extractMainTextクラスのインスタンスが得られたらemt.analyze関数を呼び出します。

var promise = emt.analyze('xxx');

返り値としてHTMLドキュメントの内容を結果とするプロミスが得られます。

サンプルコード1

3つ目のコマンドライン引数として与えられたURLからテキストデータを取得し、HTMLドキュメントとして内容を抽出し、標準出力に出力します。

extract-main-text.js

var extractMainText = require('extract-main-text');

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

var emt = new extractMainText({
    url: process.argv[2]
});

emt.analyze().then(function(content) {
    console.log(content);
}).catch(function (err) {
    console.error(err);
    process.exit(1);
});

使用パッケージ

実行結果

このブログの記事の内容を抽出してみました。

C:\work\node>node extract-main-text.js http://info-i.net/querystring-parse
Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding
257 '*' 1 '=' 257 257
89.78999999999999 '*' 0.6172839506172839 '=' 55.42592592592592 113
85.26399999999998 '*' 0.004958323290394697 '=' 0.4227664770322133 150
916.1350349999999 '*' 0.0030606933891325285 '=' 2.8040084451771974 2345
111.88906953999998 '*' 0.23520955289486503 '=' 26.317378020325858 394
28.815695142699994 '*' 0.001889316906871931 '=' 0.05444198001637048 139
クエリ文字列をパースするには下のようなモジュールを利用する方法があります。

querystring
qs

querystringモジュール
querystring.parse関数を使用します。
var querystring = require('querystring');

var q = querystring.parse('xxx');

第1引数にクエリ文字列を指定します。
返り値としてクエリ文字列を表すオブジェクトが得られます。
このオブジェクトではクエリ文字列のキーがプロパティ名となり、値がプロパティの値となります。クエリ文字列に同一のキーが複数存在する場合にはプロパティの値はそれらの値を全て含む配列となります。
qsモジュール
qs.parse関数を使用します。
var qs = require('qs');

var q = qs.parse('xxx', {
    depth: 5,
    parameterLimit: 1000,
    delimiter: '&',
    allowDots: false,
    arrayLimit: 20,
    parseArrays: true
});

第1引数にクエリ文字列を指定します。
第2引数にオプションをオブジェクトとして指定します。この引数は指定しなくても構いません。
返り値としてクエリ文字列を表すオブジェクトが得られます。
この関数はquerystring.parse関数と同様ですが、クエリ文字列のサブキーをパースすることができます。
サブキーとはキーに付加された別の1つ以上のキーであり、[と]で囲みます。
たとえば、サブキーを含むクエリ文字列は?foo[bar][baz]=quxのようなものとなります。この場合、サブキーはbarとbazです。
この関数がサブキーをパースした結果は入れ子のオブジェクトとなります。
たとえば、?foo[bar][baz]=quxのパース結果は{ foo: { bar: { baz: 'qux' } }となります。
ただし、全てのサブキーが20以下の数値か空の文字列である場合にはサブキーをパースした結果は配列となります。
たとえば、?foo[0]=bar&foo[1]=baz&foo[2]=quxのパース結果は{ foo: ['bar', 'baz', 'qux'] }となります。
第2引数のオプションには主に下のようなものがあります。

depth・・・サブキーの最大数を指定します。デフォルトは5です。
parameterLimit・・・パラメータの最大数を指定します。デフォルトは1000です。
delimiter・・・パラメータの区切り文字を文字列か正規表現として指定します。デフォルトは&です。
allowDots・・・サブキーを[と]で囲むのではなく、冒頭に.を付加するものとするかを真偽値として指定します。デフォルトはfalseです。
arrayLimit・・・サブキーをパースした結果が配列となる最大の数値を指定します。デフォルトは20です。
parseArrays・・・サブキーの配列へのパースを有効にするかを真偽値として指定します。デフォルトはtrueです。


サンプルコード1
querystring.parse関数の使用例です。
querystring-parse.js
var querystring = require('querystring');

console.log(querystring.parse('name=%E8%B5%A4%E5%B6%BA%E5%9D%82%E5%BD%A9%E9%87%8C&property=%E3%83%84%E3%83%B3%E3%83%87%E3%83%AC&property=%E5%89%AF%E7%94%9F%E5%BE%92%E4%BC%9A%E9%95%B7&property=%E5%B0%BB&b=90&w=56&h=85'));

実行結果
C:\work\node>node querystring-parse.js
{ name: '赤嶺坂彩里',
  property: [ 'ツンデレ', '副生徒会長', '尻' ],
  b: '90',
  w: '56',
  h: '85' }

サンプルコード2
qs.parse関数の使用例です。
qs-parse.js
var qs = require('qs');

console.log(qs.parse('char[name]=%E8%B5%A4%E5%B6%BA%E5%9D%82%E5%BD%A9%E9%87%8C&char[property]=%E3%83%84%E3%83%B3%E3%83%87%E3%83%AC&char[property]=%E5%89%AF%E7%94%9F%E5%BE%92%E4%BC%9A%E9%95%B7&char[property]=%E5%B0%BB&char[b]=90&char[w]=56&char[h]=85'));

使用パッケージ

qs
npm install qsでインストールします。

実行結果
C:\work\node>node qs-parse.js
{ char:
   { name: '赤嶺坂彩里',
     property: [ 'ツンデレ', '副生徒会長', '尻' ],
     b: '90',
     w: '56',
     h: '85' } }


関連

Node.js入門

関連

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

-Node.js