About

ドキュメント

各種設定

Built by Maven

クロール結果変換方法

S2Robot では、クロールした結果を期待した形に変換することができます。 変換には、Transformer インターフェースを実装したコンポーネントを登録します。

標準では、以下の Transformer があります。

  • BinaryTransformer: ウェブコンテンツをバイナリで AccessResultData に保存します。 画像などのバイナリデータを保存したい場合に便利です。 この Transformer が適用された場合は、この URL 以下の子 URL はクロールしません。
  • FileTransformer: クロール結果をファイルとして保存します。 AccessResultData には保存したファイル名が登録されます。 クロールしたファイルが HTML の場合は、子の URL をクロールします。
  • HtmlTransformer: クロールした結果を AccessResultData に保存します。 HTML を AccessResult の結果として扱いたい場合に利用します。 バイナリなどは保存できません。 クロールしたファイルが HTML の場合は、子の URL をクロールします。
  • XpathTransformer: クロールした結果を XPath で指定した部分だけを抽出して AccessResultData に保存します。 クロールしたファイルが HTML の場合は、子の URL をクロールします。

設定方法

Transformer を追加する場合は、s2robot_transformer.dicon を作成してその中で定義します。 s2robot_transformer.dicon は s2robot_rule.dicon で include されます。 標準の s2robot_transformer.dicon は以下のように s2robot_transformer_basic.dicon を include しています。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
        "http://www.seasar.org/dtd/components24.dtd">
<components>
        <include path="s2robot_transformer_basic.dicon"/>
</components>

s2robot_transformer_basic.dicon は標準で利用可能な Transformer を定義しています。 このファイルは特に作成する必要はありません。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
        "http://www.seasar.org/dtd/components24.dtd">
<components>
        <component name="binaryTransformer" class="org.seasar.robot.transformer.impl.BinaryTransformer" instance="singleton">
                <property name="name">"binaryTransformer"</property>
        </component>

        <component name="defaultFeatureMap" class="java.util.LinkedHashMap">
                <initMethod name="put">
                        <arg>"http://xml.org/sax/features/namespaces"</arg>
                        <arg>"false"</arg>
                </initMethod>
        </component>

        <component name="defaultPropertyMap" class="java.util.LinkedHashMap">
        </component>

        <component name="allChildUrlRuleMap" class="java.util.LinkedHashMap">
                <initMethod name="put">
                        <arg>"//A"</arg>
                        <arg>"href"</arg>
                </initMethod>
                <initMethod name="put">
                        <arg>"//AREA"</arg>
                        <arg>"href"</arg>
                </initMethod>
                <initMethod name="put">
                        <arg>"//FRAME"</arg>
                        <arg>"src"</arg>
                </initMethod>
                <initMethod name="put">
                        <arg>"//IFRAME"</arg>
                        <arg>"src"</arg>
                </initMethod>
                <initMethod name="put">
                        <arg>"//IMG"</arg>
                        <arg>"src"</arg>
                </initMethod>
                <initMethod name="put">
                        <arg>"//LINK"</arg>
                        <arg>"href"</arg>
                </initMethod>
                <initMethod name="put">
                        <arg>"//SCRIPT"</arg>
                        <arg>"src"</arg>
                </initMethod>
        </component>
        <component name="htmlUrlRuleMap" class="java.util.LinkedHashMap">
                <initMethod name="put">
                        <arg>"//A"</arg>
                        <arg>"href"</arg>
                </initMethod>
                <initMethod name="put">
                        <arg>"//AREA"</arg>
                        <arg>"href"</arg>
                </initMethod>
                <initMethod name="put">
                        <arg>"//FRAME"</arg>
                        <arg>"src"</arg>
                </initMethod>
                <initMethod name="put">
                        <arg>"//IFRAME"</arg>
                        <arg>"src"</arg>
                </initMethod>
        </component>
       
        <component name="fileTransformer" class="org.seasar.robot.transformer.impl.FileTransformer" instance="singleton">
                <property name="name">"fileTransformer"</property>
                <property name="featureMap">defaultFeatureMap</property>
                <property name="propertyMap">defaultPropertyMap</property>
                <property name="childUrlRuleMap">allChildUrlRuleMap</property>
        </component>

        <component name="htmlTransformer" class="org.seasar.robot.transformer.impl.HtmlTransformer" instance="singleton">
                <property name="name">"htmlTransformer"</property>
                <property name="featureMap">defaultFeatureMap</property>
                <property name="propertyMap">defaultPropertyMap</property>
                <property name="childUrlRuleMap">allChildUrlRuleMap</property>
        </component>

        <component name="htmlOnlyTransformer" class="org.seasar.robot.transformer.impl.HtmlTransformer" instance="singleton">
                <property name="name">"htmlTransformer"</property>
                <property name="featureMap">defaultFeatureMap</property>
                <property name="propertyMap">defaultPropertyMap</property>
                <property name="childUrlRuleMap">htmlUrlRuleMap</property>
        </component>
</components>

例えば、XpathTransformer を使用して、title タグと body タグ以下の内容を抽出して AccessResultData に保存したい場合は、s2robot_transformer.dicon を以下のようにします。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN"
        "http://www.seasar.org/dtd/components24.dtd">
<components>
        <include path="s2robot_transformer_basic.dicon"/>

        <component name="xpathTransformer" class="org.seasar.robot.transformer.impl.XpathTransformer" instance="singleton">
                <property name="name">"htmlTransformer"</property>
                <property name="featureMap">defaultFeatureMap</property>
                <property name="propertyMap">defaultPropertyMap</property>
                <property name="childUrlRuleMap">htmlUrlRuleMap</property>
                <initMethod name="addFieldRule">
                        <arg>"title"</arg>
                        <arg>"//TITLE"</arg>
                </initMethod>
                <initMethod name="addFieldRule">
                        <arg>"body"</arg>
                        <arg>"//BODY"</arg>
                </initMethod>
        </component>
</components>

AccessResultData に保存されるデータは以下のようになります。

<?xml version="1.0"?>
<doc>
<field name="title">タイトル</field>
<field name="body">第一章 第一節 ほげほげふがふが LINK 第2章 第2節</field>
</doc>