PERLのWeb::Scraperモジュールを使い
my $scraper = scraper {
process 'table.ranking tr','data[]' => scraper {
process '//td[1]','RANK' =>'TEXT';
process '//td[2]','name' =>'TEXT';
process '//td[3]','country' =>'TEXT';
process '//td[4]','PT' =>'TEXT';
};
};
こんな感じで収集したデータから
MYSQLなどデータベースを使用せずに
nameで検索してあたった配列からRANKを呼び出したいのですが出来ますでしょうか?
出来る場合、表示の仕方も教えていただきたいです。
よろしくおねがいします。
正規表現で検索する方法です。
my $search_word = "○○ ○○"; # 検索する名前 for my $data (@{$res->{data}}) { if ($data->{name} =~ m/$search_word/o) { print "$data->{name}と一致したデータ:ランキング $data->{RANK}<br />\n"; # すべてのデータ表示 print "$data->{RANK} $data->{name} $data->{country} $data->{PT}<br />\n"; } }
フォームから送信された場合など、区切り文字が含まれているケースにも対応させる為には、次のように事前(※「for my $data ~」の直前)に置換しておくといいです。
$search_word =~ s/(?:・|\s)/ /; # 検索対象のデータに合わせて区切り文字を統一します。
※上記は、検索対象のデータの名前の区切りが半角スペースの場合ですが、もし「・」になっている場合は、「s/\s/・/」のようにします。
回答ありがとうございます。
2012/02/19 14:51:04基本的なやり方で出来るんですね。
勉強になりました。