perlに関する質問です。

WEB検索を楽にするためにツールを探すなかで「WebScraper IDE」をみつけました。
http://labs.gmo.jp/blog/ku/2008/03/webscraperwebscraper_ide.html

これを使うために、perlとactiveperlおよび、コードの中に出てくるwebscraperをインストールしました。
そして、上記URLの通りにツールから出力されるソースを貼り付けて実行しましたが、
HASH(0x32db38c)やHASH(0x32d4384)などと出るだけで、思う結果が出力されません。

プログラム内に何か書き込むことが必要なのか、あるいは
なにかのインストールが必要なのかもわかりません。
わかる方がいらっしゃいましたら、アドバイスお願いいたします。

■貼り付けたソース
use URI;
use Web::Scraper;
my $scraper = scraper {
process '//div[contains(concat(" ",@class," "),concat(" ","Table01"," "))]',
'paragraphes[]' => scraper {
process '//strong',
'field1' => 'TEXT';
process '//tr[3]//p',
'field2' => 'TEXT';
process '//tr[4]/td[2]',
'field3' => 'TEXT';
};
};
my $result = $scraper->scrape( URI->new("http://www.starbucks.co.jp/search/result_store.php" ) );

print "$result\n";

■PCの環境
windowsXP
activeperl最新版(perlv5.10.0 ,PPM4.03)
webscraper 0.26

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

回答2件)

id:ele_dir No.1

回答回数263ベストアンサー獲得回数20

ポイント35pt

process '//tr[4]/td[2]',

の部分を、を

process '//tr[4]//td[2]',

にしてみても同じでしょうか?

id:tomokazu0525

回答ありがとうございます。スラッシュを一つ追加するってことですね。

明日、早速やってみます。

参考にならないかもしれませんが、補足説明です。

実行するときは、テキストファイルに貼り付けて、testなどといった名前のファイルにしてコマンドプロンプトで実行しています。

perl test.pl

2009/03/11 00:47:53
id:otsune No.2

回答回数35ベストアンサー獲得回数5

ポイント35pt
my $result = $scraper->scrape( ... )

で$resultにはハッシュリファレンスが入っているのでprintしただけだとHASH(0x32db38c)などと表示されます。

CPANのYAMLモジュールをインストールしてDumpすればリファレンスの中身を展開して出力できます。

具体的には

use YAML;

を追加して

binmode STDOUT, ":utf8";
print YAML::Dump $result;

をprintの代わりにする。

id:tomokazu0525

ありがとうございます!

いただいたヒントに加えて、

use encoding "shiftjis"; を追加することで、

思ったものに近いものが出るようになりました!

ただ、まだエラーが一種類だけ繰り返しでます。

"\x{00a0}" does not map to shiftjis at test3.pl line 21.

21行目は今加えた

print YAML::Dump $result;

です。

2009/03/11 09:27:24

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

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

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

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

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