HtmlParse - HTMLの解析

HTMLを解析してデータを取得します。

■ストリーム情報

入力フォーマットText,HTML
接続数1
説明解析するHTMLを含むTextもしくはHTMLストリームを入力します。
出力フォーマットRecord
説明ベースセレクターで検索した要素に対して取得する値プロパティで指定した値を各フィールドに展開し、レコード形式で出力します。

出力ストリーム変数

名前データ型説明
TitleString読み込んだHTMLのtitle属性の値

■コンポーネントプロパティ

名前プロパティ型マッピング説明
ベースセレクターstring入力&出力 取得する値の基準となる要素を選択するためのセレクターを指定します。
セレクターの指定方法については下記トピック「セレクターの指定」を参照してください。
例:
div - div要素
a[href] - href属性を持つa要素
a[href],img[src] - href属性を持つa要素、または、src属性を持つimg要素
a[href^=http://infoteria.com] - href属性がhttp://infoteria.comで始まるa要素
ベースURIstring入力&出力 abs:を使って絶対URLを取得する場合のベースURIを指定します。
この値が指定されておらずabs:を使って絶対URLを取得した場合、絶対URLが解決できない場合は空になります。
ループを開始loopProcess-ベースセレクターで複数の要素が検索された場合にレコードをまとめて出力するか1レコードずつループして出力するかを選択します。
はい [true] - ループの起点となって1レコードずつストリームに出力します。
いいえ [false] - すべてのレコードをまとめてストリームに出力します。
取得する値category-ベースセレクターで検索された要素に対してどのデータを取得するかを指定します。
このプロパティで定義したそれぞれの行が出力するフィールドになります。

フィールド名
出力するときのフィールド名
セレクター
ベースセレクターで検索された要素からさらにデータの取得対象の要素を絞るためのセレクター。
省略した場合は、検索された要素からデータを取得します。
複数のノードが該当する場合は先頭のノードの値を取得します。
ノードが見つからない場合、値はNullになります。
セレクターの指定方法については下記トピック「セレクターの指定」を参照してください。
取得対象
取得するデータ。
テキスト[#text] - 要素配下のテキストを取得します。
タグ名[#tagName] - 要素のタグ名を取得します。
ID[#id] - 要素のID属性を取得します。
クラス名[#className] - 要素のクラス名を取得します。複数クラスが指定されている場合は、空白で区切られます。
インナーHTML[#html] - 要素配下のHTMLを取得します。
アウターHTML[#outerHtml] - 要素を含むHTMLを取得します。
任意の属性名 - 要素の属性の値を取得します。

また、a要素のhref属性のように、URLを含む属性の属性名の前にabs:をつけると相対パスが絶対パスに解決されて取得されます。
データ型
出力する値のデータ型。
HTMLから取得できるデータは文字列となります。
その文字列が指定のデータ型に変換できない場合はエラーになります。

■ループ処理

ベースセレクターで検索された要素が複数あり、ループを開始が「はい」の場合、このコンポーネントがループの起点となってレコードを1つずつ出力します。

■トランザクション処理

コミット何もしません。
ロールバック何もしません。

■エラー処理

タイプパラメーターエラー処理フロー
へのストリーム
エラー
コード
説明
要素が存在しない なし コンポーネントの入力ストリーム1ベースセレクターで検索した要素が見つからなかった場合
汎用 なし コンポーネントの入力ストリーム2ベースセレクターが指定されていない場合
3ベースセレクターまたはセレクターのパースに失敗した場合

■セレクターの指定

このコンポーネントではHTMLの解析にJsoupというライブラリを使用しています。Jsoupでは要素の検索にCSSセレクターと同様の記法を用いています。以下にいくつか代表的な使用法を紹介します。もっと詳しく知りたい方はJsoupのサイトを参照ください。
パターン説明
*すべての要素*
tag要素tagdiv
ns|E名前空間nsの要素Efb|name finds <fb:name> elements
#idIDが「id」の要素div#wrap, #logo
.classクラス名が「class」の要素div.left, .result
[attr]「attr」という属性をもつ要素(値は任意)a[href], [title]
[^attrPrefix]「attrPrefix」で始まる属性をもつ要素。HTML5の独自データ属性をもつ要素を検索するのに使用してください。[^data-], div[^data-]
[attr=val]「attr」という属性を持つ要素でその値が「val」である要素img[width=500], a[rel=nofollow]
[attr^=valPrefix]「attr」という属性を持つ要素でその値が「valPrefix」で始まる要素a[href^=http:]
[attr$=valSuffix]「attr」という属性を持つ要素でその値が「valSuffix」で終わる要素img[src$=.png]
[attr*=valContaining]「attr」という属性を持つ要素でその値が「valContaining」を含む要素a[href*=/search/]
[attr~=regex]「attr」という属性を持つ要素でその値が「regex」という正規表現にマッチする要素img[src~=(?i)\\.(png|jpe?g)]
上記の組み合わせdiv.header[title]
E F要素Eの下位にある要素Fdiv a, .logo h1
E > F要素Eの直下にある要素Fol > li
E + F要素Eの直後に隣接している要素Fli + li, div.head + div
E ~ F要素Eの後ろにある同じ階層の要素Fh1 ~ p
E, F, GEもしくはFもしくはGにマッチする要素a[href], div, h3

セレクターの記法
http://jsoup.org/apidocs/index.html?org/jsoup/select/Selector.html

また、取得する値セレクターにはJsoupの記法の他に、ベースセレクターから親要素をたどるための「..」を使うことができます。例えば、「../../h2」と指定すれば、ベースセレクターで検索された2つ上の要素の下にあるh2要素のデータを取得することができます。この記法はセレクターの先頭でしか使用できませんのでご注意ください。

■URLの解決

取得する値取得対象でプレフィックスにabs:を指定した場合、URLが絶対URLとして取得できます。
このとき、実際の値が相対パスの場合は以下の順序でURLが補完されます。

  1. HTML内のbase要素のhref属性の値
  2. ベースURIで指定された値
これらがいずれも指定されてない場合、値は空文字になります。