Skip to content
mtsukamoto edited this page Sep 13, 2010 · 3 revisions

CicadaはWebクローラを作るためのツールキットです。 長期にわたって使用するWebクローラを作るためのフレームワーク、例えば PlaggerGungho のようなものではありません。一時的な用途のための短命なクローラを作るときに頻繁に使用するメソッド集のようなものです。

SYNPSISのコードを見て分るように、Webページを取得したり解析したりといったことは、WWW::MechanizeやWeb::Scraperといった便利なライブラリを使って、作成者が思うように作成するに任せます。そのかわりにCicadaは、データディレクトリを決める、タイムスタンプや処理済URLを記録する、HTTPレスポンスからコンテンツを伸張しデコードして取り出すといった定番作業を1行で行うためのメソッドを提供します。

今あなたの中にホットな目的があります。そのためのクローリングとスクレイピングのアイデア、そして「端的にいえばこういう風に処理したい」のだという手順があります。それをそのまま、コンパクトなコードに書き起こすのは楽しいでしょう?工夫のしどころがなく退屈な、お定まりの部分はCicadaに任せて、楽しくクローラを書いてください。Cicadaは、そのためのものでありたいと思っています。

NAME

Cicada – Web Crawler creating toolkit

VERSION

Version 0.01

SYNOPSIS

package MyCrawler;
use base qw(Cicada);
use Cicada::plugin::feedpp;
use Cicada::plugin::decoded_content;
use Cicada::plugin::extract_content;
use Cicada::plugin::history;
use Cicada::plugin::log;
use Cicada::plugin::mechanize;
my $crawler = MyCrawler->new;
my $url = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&topic=h';
$crawler->info("[feed] $url\n");           # act as Log::Dispatch::log
my $res = $crawler->mechanize->get($url);  # doing WWW::Mechanize::get
my $rss = $crawler->decoded_content($res); # decode with Data::Decode and Compress::Zlib
$crawler->feedpp($rss);                    # return and store XML::FeedPP(::RSS) object
my @reads = ();
my @items = $crawler->feedpp->get_item;
for (my $i = 0; $i < @items; $i++) {
    my $url = $items[$i]->link;
    # skip and record (to remove later) already-read item
    if ($crawler->history($url)) {         # check history data stored in sqlite3 database
        $crawler->info("[item] $url (skip)\n");
        push(@reads, $i);
        next;
    }
    # update description (as Plagger's EntryFullText does)
    $crawler->info("[item] $url\n");
    $crawler->mechanize->get($url);
    if (not $crawler->mechanize->res->is_success) {
        $crawler->warning($crawler->mechanize->res->status_line . "\n");
        next;
    }
    my $html = $crawler->decoded_content($crawler->mechanize->res);
    my $body = $crawler->extract_content($html); # parse with HTML::ExtractContent
    $items[$i]->description($body);
    $crawler->history($url => $res);       # store history data into sqlite3 database
}
# remove already-read items
$crawler->feedpp->remove_item($_) for (reverse(@reads));
my $path = $crawler->data_dir . '/result.rss'; # provides default data directory
$crawler->info("[result] $path\n");
$crawler->feedpp->to_file($path);

DESCRIPTION

Cicada is toolkit for creating Web Crawler. This is not a framework to create web crawler for persistent use, such as Plagger or Gungho. This is frequency used methods collection to create ephemeral crawler for temporary use.

Cicada provides trim, data_dir, require_once, load_once by itself. With its plugins, Cicada can provide additional methods like db, hisotry, timestamp extract_content and so on.

It’s still alpha. use it at your own risk!

FUNCTIONS

new

Constructor.

trim

Delete blanks on top and bottom of string. If argument is array or hash reference, this method trims its values recursively.

var_dir

Returns directory for variavles. It becomes “_var” value specified to new(), default is ‘./var’.

data_dir

Returns directory for your datas. It becomes “/”.

require_once

Require specified path. This execute requiring only one time for each path. Nothing done on second or later time.

load_once

Load (means “do” function) specified path. This execute loading only one time for each path. Nothing done on second or later time.

loaded

Return specified path is already loaded or not.

AUTHOR

Makio Tsukamoto, “”

COPYRIGHT & LICENSE

Copyright 2009 Makio Tsukamoto, all rights reserved.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.