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