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

下記の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);

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

▽最新の回答へ

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

単純に、

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

とか…

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

◎質問者からの返答

ありがとうございます!

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

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

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


2 ● tkyk3
●65ポイント ベストアンサー

ああ…ごめんなさい。

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);
◎質問者からの返答

ありがとうございます!

できました!!

関連質問


●質問をもっと探す●



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