Perl 从表中获取数据?
如何在终端中显示来自网站的数据(股票名称、资本、收盘价、市值)?我有这个网站: ,我创造了一些想法Perl 从表中获取数据?,perl,Perl,如何在终端中显示来自网站的数据(股票名称、资本、收盘价、市值)?我有这个网站: ,我创造了一些想法 my $url = 'http://www.tpex.org.tw/web/stock/aftertrading/daily_mktval/mkt.php?l=en-us'; use LWP::Simple; my $content = get $url; die "Couldn't get $url" unless defined $content; 但是我真的不知道
my $url = 'http://www.tpex.org.tw/web/stock/aftertrading/daily_mktval/mkt.php?l=en-us';
use LWP::Simple;
my $content = get $url;
die "Couldn't get $url" unless defined $content;
但是我真的不知道如何使用$content
打印我需要的数据
我将感谢您的每一个帮助:)简单的模式匹配和一些足够的技巧 在任务
$content
中包含全文
首先,使用带有s
标志的+
从$content
中提取表体内容s
标志有助于允许将任意字符与新行匹配
其次,使用
拆分提取的数据
第三,对数组迭代foreach,然后再次使用分组进行模式匹配以提取数据
此处$l1
和$l2
存储等级
和股票代码
。其他数据将存储在@arc
变量中
my $url = 'http://www.tpex.org.tw/web/stock/aftertrading/daily_mktval/mkt_print.php?l=en-us&d=2016/06/04&s=0,asc,0';
use LWP::Simple;
my $content = get $url;
die "Couldn't get $url" unless defined $content;
my ($table_body) = $content =~m/<tbody>(.+)<\/tbody>/s;
my @ar = split("</tr>",$table_body);
foreach my $lines(@ar)
{
my ($l1,$l2,@arc) = $lines =~m/>(.+?)<\/td>/g;
$, = "\t\t";
print @arc,"\n";
}
my$url='1!'http://www.tpex.org.tw/web/stock/aftertrading/daily_mktval/mkt_print.php?l=en-us&d=2016/06/04&s=0,asc,0';
使用LWP::Simple;
my$content=获取$url;
die“无法获取$url”,除非定义了$content;
我的($table_body)=$content=~m/(.+)/s;
my@ar=拆分(“,$table_body);
foreach my$行(@ar)
{
my($l1,$l2,@arc)=$lines=~m/>(.+?)/g;
$,=“\t\t”;
打印@arc,“\n”;
}
简单的模式匹配和一些足够的技巧
在任务$content
中包含全文
首先,使用带有s
标志的+
从$content
中提取表体内容s
标志有助于允许将任意字符与新行匹配
其次,使用
拆分提取的数据
第三,对数组迭代foreach,然后再次使用分组进行模式匹配以提取数据
此处$l1
和$l2
存储等级
和股票代码
。其他数据将存储在@arc
变量中
my $url = 'http://www.tpex.org.tw/web/stock/aftertrading/daily_mktval/mkt_print.php?l=en-us&d=2016/06/04&s=0,asc,0';
use LWP::Simple;
my $content = get $url;
die "Couldn't get $url" unless defined $content;
my ($table_body) = $content =~m/<tbody>(.+)<\/tbody>/s;
my @ar = split("</tr>",$table_body);
foreach my $lines(@ar)
{
my ($l1,$l2,@arc) = $lines =~m/>(.+?)<\/td>/g;
$, = "\t\t";
print @arc,"\n";
}
my$url='1!'http://www.tpex.org.tw/web/stock/aftertrading/daily_mktval/mkt_print.php?l=en-us&d=2016/06/04&s=0,asc,0';
使用LWP::Simple;
my$content=获取$url;
die“无法获取$url”,除非定义了$content;
我的($table_body)=$content=~m/(.+)/s;
my@ar=拆分(“,$table_body);
foreach my$行(@ar)
{
my($l1,$l2,@arc)=$lines=~m/>(.+?)/g;
$,=“\t\t”;
打印@arc,“\n”;
}
您需要看一下优秀的
下面是一个使用模块提取所需数据的示例。我使用URL作为该页面的打印机友好版本有两个原因:标准页面在下载后使用JavaScript构建表,因此它不适用于不支持JavaScript的LWP::Simple
;它将所有信息都包含在一个页面上,而主页将其拆分为许多短部分
这是一种比使用正则表达式模式解析HTML更健壮、更清晰、更灵活的技术,而使用正则表达式模式解析HTML通常是一个糟糕的想法
use strict;
use warnings 'all';
use LWP::Simple;
use HTML::TableExtract;
use open qw/ :std :encoding(utf-8) /;
use constant URL => 'http://www.tpex.org.tw/web/stock/aftertrading/daily_mktval/mkt_print.php?l=en-us';
my $content = get URL or die "Couldn't get " . URL;
my $te = HTML::TableExtract->new( headers => [
qr/Stock\s+Name/,
qr/Capitals/,
qr/Close\s+Price/,
qr/Market\s+Value/,
] );
$te->parse($content);
for my $row ( $te->rows ) {
next unless $row->[0]; # Skip the final row with empty fields
$_ = qq{"$_"} for $row->[0]; # Enclose the Stock Name in quotes
tr/,//d for @{$row}[1,2,3]; # and remove commas from the numeric columns
print join(',', @$row), "\n";
}
输出
“欧比制药公司”,171199584594.00101692
“先锋国际半导体有限公司”,1638982267,53.9088341
“Hermes Microvision,Inc.,710000001155.0082005
“泰美生物制品有限公司”,2477327500238.0058960
“菲森电子公司”,197373993271.0053488
“家庭艺术有限公司”,223220000202.0045090
“温半导体公司”,59666626265.3038962
“PChome在线公司”,99854871368.5036796
“东德电子有限公司”,84488699435.0036752
“圣光光学有限公司”,5041651694.0034989
“波亚股份有限公司”,95277388350.0033347
“辛普洛科技有限公司”,308284198108.0033294
“LandMark光电公司”,69909752474.5033172
“银杏国际有限公司”,92697472340.0031517
“GIGASOLAR材料公司”,60989036506.0030860
“TTY生物制药有限公司”,248649959114.0028346
“CHIPBOND技术公司”,649261998,41.9027204
“环球晶圆有限公司”,369250000,69.1025515
“eMemory Technology lnc”,75782242321.0024326
“游行科技有限公司”,76111677315.5024013
“PharmaEngine,Inc.,102101000235.0023993
“日新金融控股有限公司”,3396302860,6.8623298
...
您需要看一下优秀的
下面是一个使用模块提取所需数据的示例。我使用URL作为该页面的打印机友好版本有两个原因:标准页面在下载后使用JavaScript构建表,因此它不适用于不支持JavaScript的LWP::Simple
;它将所有信息都包含在一个页面上,而主页将其拆分为许多短部分
这是一种比使用正则表达式模式解析HTML更健壮、更清晰、更灵活的技术,而使用正则表达式模式解析HTML通常是一个糟糕的想法
use strict;
use warnings 'all';
use LWP::Simple;
use HTML::TableExtract;
use open qw/ :std :encoding(utf-8) /;
use constant URL => 'http://www.tpex.org.tw/web/stock/aftertrading/daily_mktval/mkt_print.php?l=en-us';
my $content = get URL or die "Couldn't get " . URL;
my $te = HTML::TableExtract->new( headers => [
qr/Stock\s+Name/,
qr/Capitals/,
qr/Close\s+Price/,
qr/Market\s+Value/,
] );
$te->parse($content);
for my $row ( $te->rows ) {
next unless $row->[0]; # Skip the final row with empty fields
$_ = qq{"$_"} for $row->[0]; # Enclose the Stock Name in quotes
tr/,//d for @{$row}[1,2,3]; # and remove commas from the numeric columns
print join(',', @$row), "\n";
}
输出
“欧比制药公司”,171199584594.00101692
“先锋国际半导体有限公司”,1638982267,53.9088341
“Hermes Microvision,Inc.,710000001155.0082005
“泰美生物制品有限公司”,2477327500238.0058960
“菲森电子公司”,197373993271.0053488
“家庭艺术有限公司”,223220000202.0045090
“温半导体公司”,59666626265.3038962
“PChome在线公司”,99854871368.5036796
“东德电子有限公司”,84488699435.0036752
“圣光光学有限公司”,5041651694.0034989
“波亚股份有限公司”,95277388350.0033347
“辛普洛科技有限公司”,308284198108.0033294
“LandMark光电公司”,69909752474.5033172
“银杏国际有限公司”,92697472340.0031517
“GIGASOLAR材料公司”,60989036506.0030860
“TTY生物制药有限公司”,248649959114.0028346
“CHIPBOND技术公司”,649261998,41.9027204
“环球晶圆有限公司”,369250000,69.1025515
“eMemory Technology lnc”,75782242321.0024326
“游行科技有限公司”,76111677315.5024013
“PharmaEngine,Inc.,102101000235.0023993
“孙志强