使用Perl爬取东方财富网的上证A股数据
use JSON;
use Encode;
use LWP::Simple;
use Excel::Writer::XLSX;
use utf8;
use POSIX qw(strftime);
$abc = 'http://10.push2.eastmoney.com/api/qt/clist/get?pn=1&pz=20&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152';
$data = get $abc;
die "Couldn't get data" unless defined $data;
$temp = decode_json($data);
$sum = $temp->{'data'}->{'total'};
$url = 'http://10.push2.eastmoney.com/api/qt/clist/get?pn=1&pz='.$sum.'&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152';
$content = get $url;
die "Couldn't get data" unless defined $content;
$obj = decode_json($content);
$t = strftime "%Y%m%d%H%M%S", localtime;
$workbook = Excel::Writer::XLSX->new('shanghaistockexchange'.$t.'.xlsx');
$worksheet = $workbook->add_worksheet();
@name = ('股票名称', '股票代码', '最新价','跌涨幅','跌涨额','成交量','成交额','振幅','换手率','市盈率','量比','最高','最低','今开','昨收');
$name_ref = \@name;
$worksheet->write_row(0,0,$name_ref);
$i = 1;
for $item(@{$obj->{'data'}->{'diff'}}){
@array;
$array[0] = $item->{'f14'}; #股票名称
$array[1] = $item->{'f12'}; #股票代码
$array[2] = $item->{'f2'}; #最新价
$array[3] = $item->{'f3'} eq '-' ? '-' : $item->{'f3'}."%"; #跌涨幅
$array[4] = $item->{'f4'}; #跌涨额
$array[5] = $item->{'f5'}; #成交量
$array[6] = $item->{'f6'}; #成交额
$array[7] = $item->{'f7'} eq '-' ? '-' : $item->{'f7'}."%"; #振幅
$array[8] = $item->{'f8'} eq '-' ? '-' : $item->{'f8'}."%"; #换手率
$array[9] = $item->{'f9'}; #市盈率
$array[10] = $item->{'f10'}; #量比
$array[11] = $item->{'f15'}; #最高
$array[12] = $item->{'f16'}; #最低
$array[13] = $item->{'f17'}; #今开
$array[14] = $item->{'f18'}; #昨收
$array_ref = \@array;
$worksheet->write_row( $i, 0, $array_ref );
$i++;
}
$workbook->close();
结果如图所示
perl上证.png