第 5 章 クローラ 33
付録 5. B フィルタリング
5.B.1 概要
フィルタリング処理は,URLを対象に行うフィルタリング処理とクロール結果に対して行うフィルタ リングの2種類がある.URLを対象に行うフィルタリング処理は,URLデータベースへの登録やリンク URLの抽出等を行う際に実行される.クロール結果に対して行うフィルタリングは,クロール処理内部 にて解析時に実行される.
5.B.2 URL フィルター
URLフィルターは,独立したモジュールとして構成され,各種スクリプトから使用される.URLフィ ルターには,パターンフィルター,サイトフィルター,リプレースの3つの機能が含まれる.
• パターンフィルター
指定された正規表現にマッチするURLを排除する機能である.これは,クロールを行う必要がな いとわかっているURL等を排除する際に使用する.
• サイトフィルター
サイト単位での情報を利用したフィルターで,該当するサイトが不要な場合にそのURLを排除す る機能である.こちらは,パターンフィルター内に組み込まれており,パターンフィルターを使用 すると,自動的にこちらも適用される.
• リプレース
指定された正規表現を用いて,URLの置換処理を行う機能である.セッションIDの様な不要文 字列の削除や,定型的な転送URLの置換処理に使用する.
5.B.3 クロールフィルター
クロールフィルターは,readr.pyのカスタムフィルター形式にて実装された独自フィルターモジュール である.本モジュールは,クロールを実行した結果について,解析やエラー処理,及びフィルタリング処 理を実行し,その結果からデータベース更新情報の作成や各種ログの出力,またreadr.pyに対しフィル タリング結果の通知を行う.
クロールフィルターで処理を行っている,解析処理,エラー処理,フィルター処理を以下に示す.
• URL文字列
URLに含まれる文字列に対し,正規表現にてフィルタリングを行う.フィルタリングは,全体の URLに対して行うdrop url処理と,拡張子に対して行うurl ext filterがある.
設定ブロック 設定名 内容
global url ext filter フィルタリングしたい拡張子を空白文字区切り
で記述する.
checkdb drop url URLに含まれている場合にフィルタリングした
文字列パターンを正規表現にて記述する.複数 指定する場合は,各正規表現を空白文字区切り で記述する.
• robots.txt
robots.txt取得のためのリクエストにより取得,もしくはそのリクエストが転送されて取得された
ページを最終結果に出力しない様にフィルタリングを行う.filterメソッドに渡されるrobots引数 が空白の場合,robots.txt取得リクエストもしくはその転送リクエストと判断している.
5.B フィルタリング 63
• content-type
取得したページのcontent-typeによるフィルタリングを行う.設定にて指定した正規表現にマッ チした場合のみ有効と判断する.
設定ブロック 設定名 内容
checkdb content type 取得したページを有効とするcontent-type フ ィールドの正規表現を記述する.本パラメータ は1つしか指定できない.
• 言語フィルター
言語フィルターは,取得したページの言語を判定した結果によりフィルタリングを行う.
取得したページの言語判定は,以下の順に処理を行う.
(1) readrやchardetにより判定したcharset
(2) HTTP headerやHTML metaタグのcontent-languageフィールド値 (3) utf-8で日本語判定の場合のみ使用されている文字種類(ひらがな)による判定
設定ブロック 設定名 内容
checkdb language 有効とする言語を1つだけ指定する.現在有効
な指定となるのは,japanese/english/chineseの みである.
• 辞書フィルター
辞書フィルターは,辞書に含まれる単語が一定種類以上出現した場合にフィルタリングを行う.本 フィルターでのマッチングは正規表現による単純な処理であり,言語解析等は行っていない. 現 在は,出現数や辞書ファイル等は固定設定となっており,基本的にアダルト系ページをフィルタリ ングするために使用されている.
また解析及びエラー処理として,以下の処理を実装している.
• collect2ステータス
collect2の実行ステータスを確認し,HTTPアクセスが行われなかった場合のエラー処理を行って
いる.
• HTTPステータス
HTTPステータスを確認し,HTTPアクセスにてエラーが発生した場合の処理やページ転送処理,
非更新ページの確認等を行っている.
• MD5SUM比較
追加情報として前回取得時の本文md5sumが通知された場合,今回取得したページの本文md5sum と比較を行い,ページ更新の有無をチェックしている.
これらの処理は以下の通り実行され,最後まで通過したページのみ,結果として出力される.
URL文字列 マッチした フィルタリング(URL)
マッチしない HTTPステータス(1)へ
HTTPステータス(1) collect2ステータスへ
以外 robots.txtへ
collect2ステータス
RESULT DISALLOWED LIMIT ON ADDR URL IDが不明ならば登録 それ以外は何もしない RESULT DISALLOWED LIMIT ON HOST
RESULT ABANDONED
RESULT DISALLOWED HOST IN CONFIG
フィルタリング(設定) RESULT DISALLOWED ADDR IN CONFIG
それ以外 エラー
robots.txt robots.txt取得リクエスト フィルタリング(robots)
それ以外 HTTPステータス(2)へ
HTTPステータス(2)
400-415 500-505 エラー
304 未更新(HTTPステータス)
560-571 URL IDが不明ならば登録
それ以外は何もしない
301-303 各種フィルターへ
200
その他 エラー
各種フィルター
content-type フィルタリング(type)
md5sum 未更新(md5sum)
言語フィルター フィルタリング(Lang)
辞書フィルター フィルタリング(Dic)