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);

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/02 13:42:52
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:mattn No.2

回答回数104ベストアンサー獲得回数23

ポイント100pt
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);

こんな感じでしょうか?

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

id:altaltpro

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

できました!!!!

2009/11/02 13:42:36

その他の回答1件)

id:mattn No.1

回答回数104ベストアンサー獲得回数23

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

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

に変えると動きます。

id:altaltpro

ありがとうございます!

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

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

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

2009/11/02 12:55:36
id:mattn No.2

回答回数104ベストアンサー獲得回数23ここでベストアンサー

ポイント100pt
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);

こんな感じでしょうか?

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

id:altaltpro

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

できました!!!!

2009/11/02 13:42:36

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません