Rawler ブログからのデータ取得
- Rawlerソースコード https://github.com/kiichi54321/Rawler
- wiki http://web.sfc.keio.ac.jp/~kiichi/wiki/index.php?Rawler
今回のRawlerサンプル https://gist.github.com/3980898
アメブロからのデータ取得用に作ったもの。NameUrlList.tsvにページ一覧のリストを作って置く。フィールドはURLとName。URLにはブログの一覧ページのURLをいれる。文字コードはUTF8。ブログのテキストと、コメント、画像まで取得する。
ポイント
- 複数のデータを保存する。
これは、ブログのテキストと、コメント、画像のデータを取るため、ひとつのデータベースで言うテーブルではなく、複数のテーブルを使う必要があったので、複数のデータテーブルを使っている。一つのファイルで表現しようとすると、冗長になる。データベースで言う正規化を行う必要がある。
使い方は単純、複数の[FileSave]を置き、FileSaveMode="Append"にする。これは追加書き込みをできるようにする仕組みである。ファイル名も必ず指定する。[DataWrite]は、最も近い上流の[FileSave]にしか反応しないことを注意する。
- 動的な解析対象のURLの作成
はじめの方の、[Iterator.SourceTree]で読み込むページを動的に作成している。ファイルから、一覧ページのURLを取得し、そのURLからアクセスし、その内容を解析して使うべきURLのリストを作っている。[IteratorSourceAddText]を使うことで、ItIteratorにテキストを送ることができる。この場合、繰り返しでURLのリストを作るので、必ず、IteratorSourceClearでソースリストを空っぽにしておかないと行けない。
- 一度だけ取得する[PageOnce]
[PageOnce]はページを読んだ時、一度しか行わないことを指定する。Rawlerのページング機能は強力だが、ブログの記事のようにページング外のものを欲しい時もあるのでこの命令を追加した。 [PageOnce]は直前の[Page]を参照して、初めてのページの時に実行され、[NextPage]からのページングの時には実行されない。
- 画像の保存
画像の取得は、[ImageLinks]→[DownLoad]の流れで取得。保存。この例では、画像の保存するフォルダを動的にするために、[DownLoad.FolderNameTree]を使っている。