プロが教える店舗&オフィスのセキュリティ対策術

以下のスクリプトで困ってます。質問をスクリプトの下に書きましたので、よろしくお願いします。
#------------------------------------------------------------------
#!C:/strawberry/perl/bin/perl
use strict;
use Web::Scraper;
use URI;
use YAML;
use encoding 'shiftjis';


my $stuff = URI->new("http://table.yahoo.co.jp/t?s=9503.t&a=5&b=13&c=2 …
my $scraper = scraper {
process "table table table tr td small", 'news[]' => { title1 => 'text' };
};
my $result = $scraper->scrape($stuff);


print YAML::Dump $result;

#------------------------------------------------------------------

上記のPerlスクリプトでは、
---
news:
- title1: 年
- title1: 月
- title1: 日
- title1: から
- title1: までのデータ
- title1: デイリー
- title1: 週間
- title1: 月間
- title1: '銘柄コード: '
- title1: 2009年8月14日
- title1: '2,075'
- title1: '2,090'
- title1: '2,070'
- title1: '2,080'
- title1: '1,449,300'
- title1: '2,080'
- title1: 2009年8月13日
- title1: '2,090'
- title1: '2,090'
- title1: '2,080'
- title1: '2,090'
- title1: '1,137,900'
- title1: '2,090'

のような結果が出ます。
結果を以下のようにCSVで取り出したいのですが、ロジックをどのように変更すればよいでしょうか? 
多分正規表現を使うんだと思うのですが、分かりません。
http://weblog.nqou.net/archives/20090301140728.h …
↑このページも確認していろいろ試しましたが、上手くいきません。
ご指導よろしくお願いします。

こういう↓結果にしたいです。
2009年8月14日,2075,2090,2070,2080,1449300,2080
2009年8月13日,2090,2090,2080,2090,1137900,2090

以上

A 回答 (2件)

もうちょっと、シンプルに書けると思うけど、とりあえず


#!/usr/bin/perl
use warnings;
use strict;
use Encode;
use URI;
use Web::Scraper;

my $uri_str = shift
|| 'http://table.yahoo.co.jp/t?s=9503.t&a=5&b=13&c=2 …
my $uri = new URI($uri_str) || die "$uri_str:$!";

my $scraper = scraper {
process 'table tr[bgcolor="#ffffff"]', 'records[]' => scraper {
process 'small', 'items[]' => 'TEXT';
};
};

my $res = $scraper->scrape($uri) || die "$!";

binmode STDOUT, ":encoding(shift-jis)";
foreach my $record ( @{ $res->{records} } ) {
foreach my $item ( @{ $record->{items} } ) {
$item =~ tr/,//d;
print $item, ',';
}
print "\n";
}

この回答への補足

忙しいところ、ありがとうございます。
早速試してみたのですが、以下のエラーが出ます。
どうすればよいでしょうか?
ご指導お願いします。

エラー

syntax error at bbb.pl line 10, near "my "
Global symbol "$uri" requires explicit package name at bbb.pl line 10.
Global symbol "$uri_str" requires explicit package name at bbb.pl line 10.
Global symbol "$uri_str" requires explicit package name at bbb.pl line 10.
Global symbol "$uri" requires explicit package name at bbb.pl line 18.
Execution of bbb.pl aborted due to compilation errors.

補足日時:2009/08/18 06:36
    • good
    • 0
この回答へのお礼

上記補足は誤りでした。
思ったとおりの結果が出ました。
ありがとうございます。

ロジックの中身について、追加で教えて欲しいのですが、
スクレイピングしたいURLの後ろ2009のあとの部分は
どういう意味があるのでしょうか?

2009" ;"#6197153243450676860';

お時間のあるときでけっこうですので、よろしくお願いします。

お礼日時:2009/08/18 21:34

投稿されたコードのURIをマウスオーバすると、 リンク情報が


http://....2009);
と表示されて、コピベしたときに2009以降にゴミがついたのでしょう。それ
でも開けてしまうのは、yahooがf=2009以降のクエリーをつかっていないから
だと思われます。

なので、2009" ;"#6197153243450676860';の2009以降は意味がなくて、
正しいURIを指定すればOKということです。
    • good
    • 0
この回答へのお礼

いろいろと教えてもらって、ありがとうございます。

非常に助かりました。

後は、ファイルの読み込みとか、書き込みとか自分で

勉強してみます。

ダメだったら、また質問させてもらいますので、

機会があれば、よろしくお願いします。

お礼日時:2009/08/19 20:14

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!