下記のperlコードの問題点と解決策をご教授ください。


複数行のURLを記述したテキストファイル(yomikomi.txt)を読み込み、
それぞれのURL上にあるWEBページの特定箇所にある情報を、
異なるテキストファイル(kakikomi.txt)に書き写す。
という作業を行いため、下記のようなコードをを書いたのですが、
全く機能しません。
ご教授のほど宜しくお願い申し上げます。
===========コードスタート===========

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


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

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

# URLオブジェクトを、
my @uri = new URI(@line);


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

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

# 先ほどのスクレイパーに渡す。(スクレイピングされる)
for(@uri){my $res = $scraper->scrape($uri);


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

}

close(IN);

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

ベストアンサー

id:tkyk3 No.2

回答回数60ベストアンサー獲得回数7

ポイント65pt

ああ…ごめんなさい。

URI使ったこと無いので…多分、ここで複数のURLを取得できていないとか…

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

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

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

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

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

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

close(IN);
id:altaltpro

ありがとうございます!

できました!!

2009/10/30 12:29:41

その他の回答1件)

id:tkyk3 No.1

回答回数60ベストアンサー獲得回数7

ポイント30pt
# 先ほどのスクレイパーに渡す。(スクレイピングされる)
for(@uri){my $res = $scraper->scrape($uri);

単純に、

# 先ほどのスクレイパーに渡す。(スクレイピングされる)
for(@uri){my $res = $scraper->scrape($_);

とか…

まだあるかもしれませんが…。間違っていたら済みません。

id:altaltpro

ありがとうございます!

読み込みファイルの一行目の結果に対する読み込みはできるようになったのですが、

二行目以降の結果が依然としてでてきません。

他にもあるのでしょうか。

2009/10/30 11:47:57
id:tkyk3 No.2

回答回数60ベストアンサー獲得回数7ここでベストアンサー

ポイント65pt

ああ…ごめんなさい。

URI使ったこと無いので…多分、ここで複数のURLを取得できていないとか…

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

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

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

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

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

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

close(IN);
id:altaltpro

ありがとうございます!

できました!!

2009/10/30 12:29:41
  • id:tkyk3
    もうちょっと見てみれば無駄にポイント出さなくて済んだのに…すみません。
    Web::Scraper面白そうですね、また使ってみます(^^)
  • id:striderkein
    ほんとにこれで動いたんですか??
    close(IN)
    宣言してないのにcloseできる理由が分からない

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

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

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

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