Sc2009autumn s2robot
-
Upload
shinsuke-sugaya -
Category
Technology
-
view
3.031 -
download
1
Transcript of Sc2009autumn s2robot
Seasar Conference2009 Autumn
Copyright© 2002-2008 N2SM, Inc. All Rights Reserved
S2Robotで泳ぎませんか?~S2RobotとFessのご紹介~
株式会社エヌツーエスエム菅谷信介
Seasar Conference 2009 Autumn
自己紹介 名前: 菅谷信介 所属: N2SM, Inc. オープンソース活動:
– Apache Portals (Jetspeed, Portals Bridges) コミッタ– Seasarプロジェクトコミッタ(S2Container, Teeda,
SAStruts, DBFlute, S2Portlet, S2Robot..)– Portal Application Laboratory(PAL)プロジェクト運
営– Fessプロジェクト運営などなど・・・
ブログ: http://d.hatena.ne.jp/shinsuke_sugaya/
Seasar Conference 2009 Autumn
Agenda S2Robot の概要 S2Robot の使い方 Fess の概要 Fess の特徴 Fess の使い方
Seasar Conference 2009 Autumn
S2Robot
Seasar Conference 2009 Autumn
Seasar2ベースのクローラフレームワーク「クローラ (Crawler) とは、ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラムである。「スパイダー」や「ロボット」などとも呼ばれ
る。」 出典: フリー百科事典『ウィキペディア(Wikipedia)』
コンポーネント化され、機能を柔軟にカスタマイズ可能
S2Robotとは
インターネットS2Robot
Seasar Conference 2009 Autumn
全文検索のインデックス作成→ 一番多いパターン(だと思う)
サイトの商品情報などを抜き出し→ ページ上の特定のデータを抜き出してDBに保存するなど
SEOチェックツール→ リンク切れとか、要素数を数えるなど
クローラを開発するというニーズは意外と多いHTTP通信やページ解析が面倒だから?
→実際に面倒でした…
クローラの利用場面
Seasar Conference 2009 Autumn
Webおよびローカルファイルシステムを対象 マルチスレッドクローリング 巡回する深さ、コンテンツ取得数を指定可能 巡回するコンテンツをURLでフィルタリング 柔軟に拡張可能なコンテンツ処理ルール 取得したコンテンツを指定した形式でDBに格納 画像や音声など様々なファイルから文字列抽出 robots.txt に従うクローリング
S2Robotの特徴
Seasar Conference 2009 Autumn
S2プロジェクトなら dicon に追加
S2Robotのセットアップ
<components> : <include path="s2robot.dicon"/> :</components>
備考: DBを利用する場合は s2robot_db.dicon を利用
簡単に使えます!
あとは、S2Robot を DI すれば利用可能
Seasar Conference 2009 Autumn
S2Robot のインスタンスを取得して実行
S2Robotの使い方(基本編)
// container から取得する場合S2Robot s2Robot = (S2Robot) container .getComponent(S2Robot.class);
// URL の追加 (この URL を起点にして巡回します)s2Robot.addUrl(url);// 巡回する深さを指定s2Robot.setMaxDepth(depth);
// クロールの実行 (実行時のセッション ID が返ります)String sessionId = s2Robot.execute();
カレントディレクトリに取得したものを保存
Seasar Conference 2009 Autumn
S2Robotの処理フロー
S2Robot
S2RobotThreadS2RobotThreadS2RobotThread S2RobotClient(Web,FS)
UrlFilter WebFS
execute()
start() Check the URL
Get the Content
ResponseData
RuleManagerRule
ResponseProcessor
process()
Transformer
ResponseData
ResultData
S2Robot DB
store()AccessResult
1
2
3
4
5
6
78
9
101112
WebFSWebFS
Seasar Conference 2009 Autumn
スレッド数の変更
巡回して取得するファイル数
URLキューが空のときに待つ回数
S2Robotの使い方(応用編 ~ その1)
// デフォルトのスレッド数: 10s2Robot. setNumOfThread(20);
// デフォルトの巡回取得数: 0 (無制限)s2Robot. setMaxAccessCount(10000);
// デフォルトの待つ回数: 20s2Robot. setMaxThreadCheckCount(30);
Seasar Conference 2009 Autumn
バックグラウンドで実行
バックグラウンド実行後、終了を待つ
セッションIDの指定 (再実行するときなどに利用)
S2Robotの使い方(応用編 ~ その2)
// デフォルト: false (execute() した後に待つ)s2Robot. setBackground(true);
// デフォルトの待ち時間 (ms): 0 (無制限)s2Robot. awaitTermination(60000);
// デフォルトのセッションID: yyyyMMddHHmmssSSSs2Robot. setSessionId(“200909120123456”);
Seasar Conference 2009 Autumn
アクセスするURLを制限することが可能 S2Robot 内の UrlFilter がアクセス先の URL を制御 アクセスできる URL を指定: addIncludeUrl()
アクセスしない URL を指定: addExcludeUrl()
デフォルトの実装 UrlFilterImpl を dicon で差し替えも可能
URLフィルタ
// 例: http://www.n2sm.net/ 以下だけにするs2Robot. addIncludeFilter(“http://www.n2sm.net/.*”);
// 例: jpg ファイルをアクセスしないs2Robot. addExcludeFilter(“.*\\.jpg”);
Seasar Conference 2009 Autumn
指定されたコンテンツの取得 CommonsHttpClient: http/https からコンテンツを取得 FileSystemClient: ローカルファイルシステムから取
得 S2RobotClientFactoryがS2RobotClientを管理
clientFactory は S2Container から取得可能 client.doGet(uri) でコンテンツを ResponseData で返
す 拡張は S2RobotClient を実装して s2robot_client.dicon
で addClient に加える
S2RobotClient
// url を元に適切なクライアントを判別 (http:,https:,file:)S2RobotClient client = clientFactory.getClient(url);
Seasar Conference 2009 Autumn
RuleManager: 取得したコンテンツの処理ルールを決定
Rule: コンテンツの処理内容を定義 RuleManager から Rule を取得
RuleManagerは S2Container からは取得できない (prototypeでS2Robotにセットされるため)
拡張は s2robot_rule.dicon で定義することが可能
RuleManager & Rule (その1)
// responseData を元に適切なルールを判別Rule rule = s2Robot. getRuleManager() .ruleManager.getRule(responseData);
Seasar Conference 2009 Autumn
addRule で複数ルールを追加することが可能
RuleManager & Rule (その2)
<components> <include path="s2robot_transformer.dicon"/>
<component name="ruleManager" class="org.seasar.robot.rule.impl.RuleManagerImpl" instance="prototype"> <initMethod name="addRule"> <arg>fileRule</arg> </initMethod> </component>
<component name="fileRule" class="org.seasar.robot.rule.impl.RegexRule"> <property name="defaultRule">true</property> <property name="responseProcessor"> <component class="org.seasar.robot.processor.impl.DefaultResponseProcessor"> <property name="transformer">fileTransformer</property> </component> </property> </component></components>;
Seasar Conference 2009 Autumn
ResponseDataを処理する DefaultResponseProcessor: 保持するTransformerを実
行
Transfomerは s2robot_rule.dicon で指定される NullResponseProcessor: 何もしない
ResponseProcessor
// RuleからResponseProcessorを取得 ResponseProcessor processor = rule.getResponseProcessor();processor.process(responseData);
Seasar Conference 2009 Autumn
ResponseDataをResuleDataに変換する ResultDataは取得データを加工したものを保持
例: 画像のメタデータから文字列を取得して保存など s2robot_transfomer_basic.dicon に基本的なものを定
義
保存データを復元も可能
Transfomer (その1)
// ResponseDataをResuleDataに変換 ResultData resultData = transformer.transform(responseData);
Transfomer transfomer = container .getComponent(“fileTransfomer”);// getData() で返されるものは各Transformerで定義Object obj = transformer. getData(accessResultData);
Seasar Conference 2009 Autumn
BinaryTransformer: バイナリデータをResultDataに格納
FileTransformer: カレントディレクトリにファイルとして保存
し、ResultDataにパスを格納 HtmlTransformer:
HTMLのバイナリデータと次のリンク先をResultDataに格納 XpathTransformer:
上記の拡張。指定したノードデータをXML形式で保存 TextTransformer:
文字列をResultDataに格納。Extractor機能を利用して様々な形式に対応。
Transfomer (その2)
Seasar Conference 2009 Autumn
様々なファイルから文字列を取得 対応フォーマットはMS Office, pdf, zip など多数 ExtractorFactoryがExtractorを管理
extractorFactoryはS2Containerから取得可能 Extractorの単体利用も可能 (s2robot_extractor.dicon)
Extractor
Extractor extractor = extractorFactory.getExtractor(mimeType);ExtractData extractData = extractor.getText(inputStream);String content = extractData.getContent();// content に inputStream のデータ本体の文字列だけ入るfor (String key : extractData.getKeySet()) { String[] values = extractData.getValues(key); // values にはメタ情報が入る}
Seasar Conference 2009 Autumn
データ格納用エンティティ AccessResult: アクセス結果のパラメータ AccessResultData: 加工後のコンテンツデータ ResponseDataとResultDataからAccessResultと
AccessResultData を生成 DataService インターフェース経由でアクセス 現在、オンメモリまたはDBに保存することが可能
AccessResult & AccessResultData
Seasar Conference 2009 Autumn
AccessResultとAccessResultDataの取得や保存など S2Containerから取得することが可能 AccessResultの取得
あるセッションIDのAccessResult群を取得
DataService
// セッションIDとURLをキーにして取得AccessResult accressResult = dataService .getAccessResult(sessionId, url);
dataService.iterate(sessionId, new AccessResultCallback() { public void iterate(AccessResult accessResult) { // accessResult の処理… }});
Seasar Conference 2009 Autumn
マルチスレッドクローリング→ 同期を最低限にしたり、結構がんばりが必要
壊れた HTML→ nekohtml が結構吸収してくれるけど→ 大手サイトのページでもおかしいものがあったりする…
コンテンツ取得数の指定→ マルチスレッドなので上限で止めるのが大変…
S2Robotのスレッドセーフ→ 複数のS2Robotのインスタンスを同時実行
H2Databaseのパラメータ→奥深い・・・(よくわからん)
S2Robotの苦労話 (おまけ?)
Seasar Conference 2009 Autumn
データベース周りの整理 metaタグの robots に従う 壊れたURL対応(不正な文字とかを除外するフィ
ルタ) サイトマップを読む OpenOffice 系ファイル対応
S2Robotの今後
Seasar Conference 2009 Autumn
Fess
Seasar Conference 2009 Autumn
Javaフレンドリーな全文検索システム「全文検索(ぜんぶんけんさく、Full text search)とは、コ
ンピュータにおいて、複数の文書(ファイル)から特定の文字列を検索すること。」 出典: フリー百科事典『ウィキペディア(Wikipedia)』
Apacheライセンスのオープンソースプロダクト ちなみに Full tExt Search System → Fess
Fessとは
Fessサーバファイルシステム インターネット
Seasar Conference 2009 Autumn
Namazu, Hyper Estraier, Senna, Rast, Nutch, Google Mini, FAST ESP, ConceptBase...
Namazu→スケールしない
Google Mini→ブラックボックス→入れ替え作業が発生する
世の中の検索システム
Seasar Conference 2009 Autumn
Java (Seasar2) ベースの検索システムFessの特徴 (その1)
S2ChronosS2Container SAStruts S2Robot
DBFlute
用途に応じて柔軟に対応可能な設計
Seasar Conference 2009 Autumn
標準でオールインワンで提供 Tomcat の起動で利用可能!
Fessの構成図
Tomcat
SAStruts Solr
S2Robot
H2Database
S2Chronos
Seasar2
DBFlute
fess.war solr.war
Seasar Conference 2009 Autumn
S2Robot で Web とファイルシステムをクロール
様々なファイルフォーマットをサポート→テキスト(HTML,XML含む)、MS Office関
連、PDF、zipなどの圧縮ファイル、画像ファイル、音楽ファイル
ブラウザ上でクロール対象設定 検索結果のパス変換 (ローカルパスの変換と
か) クロール情報のサマリー表示
Fessの特徴 (その2) ~ S2Robotなど
Seasar Conference 2009 Autumn
Luceneベースのオープンソース検索サーバー XML/HTTP や JSON の API Fess のUI から SolrJ で接続 ファセット検索 検索結果の強調表示 SHOOTIで約2億のWebページをインデックス
Fessの特徴 (その3) ~ Apache Solr
Fess ではSolrサーバーをグループ化して状態管理(ハイエンドユースを視野に入れた設計)
Seasar Conference 2009 Autumn
検索サーバ・更新サーバ交換方式Solrサーバ構成例1
Fess
Solr Group 1
Solr Group 2
検索
更新
Seasar Conference 2009 Autumn
レプリケーション方式Solrサーバ構成例2
Fess
Solr Group 1
Solr Group 2
検索
更新
インデックスコピー
Seasar Conference 2009 Autumn
分散クロール方式Solrサーバ構成例3
Fess
Solr Group 1
Solr Group 2
検索
更新
インデックスコピー
Fess DB
Seasar Conference 2009 Autumn
携帯向けアプリ構築のオープンソースフレームワーク→ 3キャリアの絵文字に対応→ 3キャリアの絵文字入りメール/添付メール/デコメールの
送信に対応→ 画像を動的にリサイズ表示→ 端末プロファイル情報などを取得可能→ GPS/GoogleMapインターフェースを提供
Fessの特徴 (その4) ~ mobylet
Fessでは各端末に最適な表示を実現
Seasar Conference 2009 Autumn
検索語を入力
Fess のUI (検索結果)
Seasar Conference 2009 Autumn
管理者でログイン クロール時刻、インデックス操作、モバイル変換
を設定
Fessの管理UI (クローラ設定)
Seasar Conference 2009 Autumn
クロールするウェブ情報の設定管理
対象URLとフィルタ 各種パラメータ ユーザーエージェント名 ブラウザタイプ
Fessの管理UI (ウェブクロールの設定)
Seasar Conference 2009 Autumn
クロールするファイルシステム情報の設定管理
対象パスとフィルタ 各種パラメータ ブラウザタイプ
Fessの管理UI (ファイルシステムクロールの設定)
Seasar Conference 2009 Autumn
検索結果のリンクを書き換えるクロールした結果がファイルシステムの場合にブラウザか
らアクセスできるように書き換えるなどで利用
Fessの管理UI (パスマッピング設定)
Seasar Conference 2009 Autumn
検索結果表示時にブラウザの種類で表示を切り替え
モバイルでアクセスした場合はモバイルページに移動
Fessの管理UI (ブラウザタイプ設定)
Seasar Conference 2009 Autumn
Solrの状態と設定管理 グループ化された Solr に対して、コミット、最適
化、削除を実行可能
Fessの管理UI (Solr設定)
Seasar Conference 2009 Autumn
クロール結果の情報表示
クロール時間 インデックス数
Fessの管理UI (セッション情報)
Seasar Conference 2009 Autumn
プロジェクトサイト:http://fess.sourceforge.jp/ja/
Fess Server 1.0.0 が利用可能
Fess の情報
要望などあればお知らせください
Seasar Conference 2009 Autumn
認証サイトへのアクセス ログファイルのダウンロード リクエストヘッダーの付加 重複ドメインの除外 ロールによる検索結果の出しわけ ラベル付け Solr のアップグレード
Fess の今後
Seasar Conference 2009 Autumn
ありがとうございました