Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 从表中获取数据?_Perl - Fatal编程技术网

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
“孙志强