你是不是很懶的去抄那一堆資料?
你還在用手算?
各位認識小弟的股友們有福了,信我,沒辦法給你上天堂,也沒辦法給永生,但是,讓你多空出點時間陪家人這小事還是做得到,底下的是Perl寫的webTableKiller,這網頁表格殺手主要功能就是把網頁上面的資料抓下來,讓後面串接的Script可以快速的取得網頁的資料,我是拿Yahoo的股市當祭品做出來。
Perl的特色是垮平台都可以使用,也可以找Perl2Exe轉成Windows執行檔(不建議)。
$./webTableKiller <網址> <取出目標欄位的.CSV檔案>
#!/usr/bin/perl use LWP; use HTML::TreeBuilder; use Text::Iconv; my $url="http://tw.stock.yahoo.com/d/s/company_3115.html"; if(defined $ARGV[0]){ if($ARGV[0] =~ /^http/){ $url=$ARGV[0]; } } my $showAll=0; my @getList; my $getLists; if(defined $ARGV[1]){ if($ARGV[1] =~ /\.csv$/i){ if(open(FH, "<$ARGV[1]")){ @getList=; close FH; } } } foreach (@getList){ $getLists.=$_; } my $ua=LWP::UserAgent->new; my $res=$ua->get($url); die "Can't get $url ", $res->status_line unless $res->is_success; my $html=$res->content; $converter = Text::Iconv->new("big5", "utf8"); $html = $converter->convert("$html"); #print "$html\r\n"; my $root=HTML::TreeBuilder->new_from_content($html); my $layer=0; &parserLookDown($root,$layer); sub isOnList{ my $currentPos=shift; my $count=0; foreach(@getList){ if($_ =~ /$currentPos/){ #print "$currentPos/\t$_\n"; $count++; } } return $count; } sub parserLookDown{ my $root=shift; my $layer=shift; $layer++; my @tables=$root->look_down(_tag=>'table'); for my $i(0 .. @tables-1){ my $tmp=$tables[$i]->as_trimmed_text; my @trs=$tables[$i]->look_down(_tag=>'tr'); for my $j(0 .. @trs-1){ my @tds=$trs[$j]->look_down(_tag=>'td'); for my $k(0 .. @tds-1){ if($tds[$k]->as_HTML =~ /table/){ &parserLookDown($tds[$k],$layer); } my $tmp=$tds[$k]->as_trimmed_text; $_=~s/\ //g; if(@getList > 0){ my $currentPos="$layer,$i,$j,$k"; if(&isOnList($currentPos) > 0){ print "$tmp,"; } }else{ print "($layer,$i,$j,$k)$tmp,"; } } if(@getList <= 0){ print "\r\n"; } } } } $root->delete;
沒有留言:
張貼留言