-
Notifications
You must be signed in to change notification settings - Fork 0
Home
CicadaはWebクローラを作るためのツールキットです。 長期にわたって使用するWebクローラを作るためのフレームワーク、例えば Plagger や Gungho のようなものではありません。一時的な用途のための短命なクローラを作るときに頻繁に使用するメソッド集のようなものです。
SYNPSISのコードを見て分るように、Webページを取得したり解析したりといったことは、WWW::MechanizeやWeb::Scraperといった便利なライブラリを使って、作成者が思うように作成するに任せます。そのかわりにCicadaは、データディレクトリを決める、タイムスタンプや処理済URLを記録する、HTTPレスポンスからコンテンツを伸張しデコードして取り出すといった定番作業を1行で行うためのメソッドを提供します。
今あなたの中にホットな目的があります。そのためのクローリングとスクレイピングのアイデア、そして「端的にいえばこういう風に処理したい」のだという手順があります。それをそのまま、コンパクトなコードに書き起こすのは楽しいでしょう?工夫のしどころがなく退屈な、お定まりの部分はCicadaに任せて、楽しくクローラを書いてください。Cicadaは、そのためのものでありたいと思っています。
Cicada – Web Crawler creating toolkit
Version 0.01
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);
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!
Constructor.
Delete blanks on top and bottom of string. If argument is array or hash reference, this method trims its values recursively.
Returns directory for variavles. It becomes “_var” value specified to new(), default is ‘./var’.
Returns directory for your datas. It becomes “/”.
Require specified path. This execute requiring only one time for each path. Nothing done on second or later time.
Load (means “do” function) specified path. This execute loading only one time for each path. Nothing done on second or later time.
Return specified path is already loaded or not.
Makio Tsukamoto, “”
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.