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

perlに関する質問です。

下記のソースで、a[ @class="url" ]のものを目的のページから1つだけ抽出することはできるのですが、
ページ内にある全てのa[ @class="url" ]を抽出するためには、どのように変更したらよいのでしょうか。

use Web::Scraper;
use URI;
use encoding "shiftjis";
binmode STDERR, ":encoding(shiftjis)";

# 特定部分を number という名前で取るスクレイパーを作成
my $scraper = scraper {
process '//a[ @class="url" ]', 'number' => 'TEXT';
};

# 入力モードでオープン
open(FH,"<yomikomi.txt");
# 読み込み
@line = <FH>;
close(FH);


# URL情報に追加
$a = "http://abc.";
$b = "&abc";
@list=();
foreach (@line) {
push(@list,$a . $_ . $b);
}

# ファイル名をしたファイルへの書き込み
my $out_file = "kakikomi.txt"; #出力ファイル

open( my $out_fh, ">", $out_file );

foreach (@list) {
my $uri = URI->new($_); # URLオブジェクトを取得
my $res = $scraper->scrape($uri); # スクレイパーに渡す。(スクレイピングされる)
print $out_fh"$res->{number}\n";
}

close(IN);

●質問者: altaltpro
●カテゴリ:コンピュータ インターネット
✍キーワード:ABC Class Number open Perl
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● mattn
●35ポイント
process '//a[ @class="url" ]', 'number' => 'TEXT';

process '//a[ @class="url" ]', 'number[]' => 'TEXT';

に変えると動きます。

◎質問者からの返答

ありがとうございます!

やってみたのですが、まだ動きません。。

print $out_fh"$res->{number}\n";

のあたりにも問題があるのかなと、個人的には思っているのですが。。


2 ● mattn
●100ポイント ベストアンサー
use Web::Scraper;
use URI;
use encoding "shiftjis";
binmode STDERR, ":encoding(shiftjis)";

# 特定部分を number という名前で取るスクレイパーを作成
my $scraper = scraper {
process '//a[ @class="url" ]', 'number[]' => 'TEXT';
};

# 入力モードでオープン
open(FH,"<yomikomi.txt");
# 読み込み
@line = <FH>;
close(FH);


# URL情報に追加
$a = "
http://abc.";
$b = "&abc";
@list=();
foreach (@line) {
push(@list,$a . $_ . $b);
}

# ファイル名をしたファイルへの書き込み
my $out_file = "kakikomi.txt"; #出力ファイル

open( my $out_fh, ">", $out_file );

foreach (@list) {
my $uri = URI->new($_); # URLオブジェクトを取得
my $res = $scraper->scrape($uri); # スクレイパーに渡す。(スクレイピングされる)
for my $number (@{$res->{number}}) {
print $out_fh "$number\n";
}
}

close(IN);

こんな感じでしょうか?

試してないので分かりませんが。

◎質問者からの返答

ありがとうございました!!

できました!!!!

関連質問


●質問をもっと探す●



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