人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PERLのWeb::Scraperモジュールに関しての質問です。

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を呼び出したいのですが出来ますでしょうか?

出来る場合、表示の仕方も教えていただきたいです。
よろしくおねがいします。

●質問者: robopit
●カテゴリ:ウェブ制作 学習・教育
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rouge_2008
●100ポイント ベストアンサー

正規表現で検索する方法です。

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/・/」のようにします。


robopitさんのコメント
回答ありがとうございます。 基本的なやり方で出来るんですね。 勉強になりました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ