Perl表提取或多页表的其他方法

时间:2013-12-03 06:29:48

标签: html perl

我正在尝试从表中提取元素,我已成功使用get和HTML:TableExtract来获取表的元素。问题是表格是多页面,并使用箭头按钮导航以显示其他页面。我如何提取这些其他页面,因为它们不是新链接,但我认为用JS等生成?

具体来说,我试图在以下数据范围的数据下提取表格:

http://ycharts.com/companies/GOOG/pe_ratio#series=type:company,id:GOOG,calc:pe_ratio,,id:AAPL,type:company,calc:pe_ratio,,id:AMZN,type:company,calc:pe_ratio&zoom=3&startDate=&endDate=&format=real&recessions=false

查看查看x为45以及First,Previous,Next,Last按钮。

其余的表元素可以用下一个查看,我将如何在perl中提取这些元素?

更新:: 嗨Simbabque,谢谢你的回复 所以我看看你是否点击下一个电话:
ng-click =“getHistoricalData(historicalData.currentPage + 1)”

有没有办法可以调用这种方法?我尝试使用click,但它没有绑定名称。 (JS?)

我现在正尝试使用Mechanize :: Firefox,但我觉得他们必须是一个简单的方法来使用常规Mech并调用该函数并重新阅读该页面?

1 个答案:

答案 0 :(得分:1)

该网站使用AJAX请求构建表。那些解析起来有点困难。您可以使用WWW::Mechanize获取初始页面,然后点击表格的AJAX调用。它可以帮助您自动跟踪cookie和内容。

use strict; use warnings;
use WWW::Mechanize;
my $mech = WWW::Mechanize->new;
$mech->get('http://ycharts.com/companies/GOOG/pe_ratio#series=type:company,id:GOOG,calc:pe_ratio,,id:AAPL,type:company,calc:pe_ratio,,id:AMZN,type:company,calc:pe_ratio&zoom=3&startDate=&endDate=&format=real&recessions=false');

my $response = $mech->post(
  'http://ycharts.com/companies/GOOG/pe_ratio/data_ajax',
  {
    startDate => '1/1/1962',
    endDate   => '12/3/2013',
    pageNum   => 4,
  }
);

if ( $response->is_success ) {
  print $response->decoded_content;    # or whatever
} else {
  die $response->status_line;
}

这只是一个基本的例子,不起作用。它给出403 Forbidden。可能需要更多数据。使用Firebug或类似工具检查发生的情况。例如,对http://ping.chartbeat.net/ping?h=ycharts.com&p=%2Fcompanies%2FGOOG%2Fpe_ratio&u=o3m6snxteynby1b8&d=ycharts.com&g=20054&n=1&f=00001&c=10.81&x=200&y=1812&o=1663&w=658&j=30&R=0&W=1&I=0&E=109&e=6&b=1903&t=usmc0fjfd1j0h87g&V=16&_的另一次调用会不时地自动发生,并且参数不同。这很可能是保持会议进行所必需的。

此页面相当复杂。这可能不是最好的方法。

您也可以尝试使用WWW :: Mechanize :: Firefox甚至Selenium来远程操作浏览器。这将更适合,因为它会处理正在发生的所有AJAX事情。

或者你可以寻找一个公开的API,只是自愿交出这些数据。我打赌周围有一个......或者只是支付一个ycharts亲账户并点击下载按钮。 ; - )