ブロックを積みながら(50) Node-RED、html(パース)ノードで要素の抽出

Joseph Halfmoon

前回まででファイルへの入出力ができるようになったので、今回からはパレットのパーサの部?にあるノードを使ってみたいと思います。最初は、htmlノードです。いろいろ出来そうなノードであるのですが、今回はシンプルにタイトルを抽出した文字列の配列を取り出してみたいと思います。

※「ブロックを積みながら」投稿順 index はこちら

今回実験したフロー

今回のフローは以下の「一本道」です。

    1. Injectノード
    2. file in ノード
    3. html ノード
    4. debug ノード

FlowInjectノードは、デフォルトのタイムスタンプ出力ですが、これは次段のfile inノードがファイルを読み出すためのトリガでしかありません。

次段のfile in ノードで読み出したhtmlファイルをその次のhtml ノードで抽出し、最後のdebugノードで抽出結果を出力しようというものです。

file in ノード

file in ノードは、前回使ってみたファイルシステムからファイルを読み出すことが出来るノードです。この部分をネットワークからhtmlファイルをフェッチするように変更すれば面白いとは思うのですが、またそのうち。読み出しているファイルは、本稿作成時点で本サイトのトップにあった以下の記事のhtmlです。

部品屋根性(60) エイブリック、S5716、ホールIC

ファイルはフルパスで指定した方が安心なのでそうしています。出力は文字列を指定。バイナリ形式あるいは、1行単位のテキストにすることも可能です。モジコードはデフォルトのまま。

fileIn

htmlノード

htmlパーサです。msg.payloadに載っているhtmlをパースして要素を抽出した結果をmsg.payloadに載せて送り出します。抽出する要素は今回やっているようにhtmlノードの設定で指定することもできれば、msg.selectプロパティに載っている値で処理させることもできるようです。

今回は、h6タグ(小見出し的なタイトル)を抽出し、該当要素のテキストのみを配列に載せて送り出す設定です。出力形式を選択できるので多段でフィルタかけるような使い方はしやすいんじゃないかと思います。

html_parser

実行結果

Injectノードからトリガを掛け、デバッグウインドウに出力されたのが以下です。意図通り h6 タグの小見出しの文字列が抽出され arrayに載ってきました。

Extracted
ネットと組み合わせると、いろいろ出来そうだなと、ついついほくそ笑む?のであります。

ブロックを積みながら(49) Node-RED、fileノードでファイルへ書き込み へ戻る

ブロックを積みながら(51) Node-RED、http requestノードでpost へ進む