【问题标题】:Perl table Extract or other method for multi page tablePerl 表提取或多页表的其他方法
【发布时间】:2017-05-20 16:39:44
【问题描述】:

我正在尝试从表格中提取元素,我已成功使用 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

看看如何有 45 的查看 x 和第一个、上一个、下一个、最后一个按钮。

可以用next查看其余的表格元素,我将如何在perl中提取它们?

更新:: 嗨 Simbabque,感谢您的回复。
所以我看看你是否点击下一步它会调用:
ng-click="getHistoricalData(historicalData.currentPage+1)"

有什么方法可以调用这个方法吗?我尝试使用点击,但它没有绑定名称。 (JS?)

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

【问题讨论】:

  • 请使用 cmets 回复答案。不要将您的回复编辑到您的问题中。如果您需要有关 Stack Overflow 工作原理的帮助,请阅读 faq。使用 WWW::Mechanize,您无法执行任何 Javascript。没有调用那个函数。

标签: html perl


【解决方案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 专业帐户并点击下载按钮。 ;-)

【讨论】:

    猜你喜欢
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-26
    • 2014-06-20
    • 2015-12-07
    相关资源
    最近更新 更多