Извлечение таблицы Perl или другой метод для многостраничной таблицы

0

Я пытаюсь извлечь элементы из таблицы, я успешно использовал get и HTML: TableExtract, чтобы получить элементы таблицы. Проблема заключается в том, что таблица представляет собой многостраничную страницу и перемещается со стрелкой для отображения дополнительных страниц. Как бы я извлечь эти другие страницы, поскольку они не являются новыми ссылками, но я думаю, что сгенерировано с помощью JS или такого?

В частности, я пытаюсь извлечь таблицу в Data для этого диапазона данных по адресу:

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, известково: pe_ratio и увеличение = 3 & STARTDATE = & ENDDATE = & = формат реальные и спады = ложь

Посмотрите, как происходит просмотр x из 45 и первая, предыдущая, следующая, последняя.

Остальные элементы таблицы можно просмотреть следующим образом: как я могу извлечь их в perl?

Обновление :: Привет, Simbabque, Спасибо за ответ.
Поэтому я вижу, что вы нажмете дальше:
нг кнопкой мыши = "getHistoricalData (historicalData.currentPage + 1),"

Есть ли способ, которым я могу назвать этот метод? Я попытался использовать клик, но это не связано с именем. (JS?)

Я пытался использовать Mechanize :: Firefox сейчас, но я чувствую, что они должны быть простым способом использовать обычный Mech и вызвать функцию и перечитать страницу?

  • 0
    Пожалуйста, используйте комментарии, чтобы ответить на ответы. Не редактируйте свои ответы на свой вопрос. Прочтите часто задаваемые вопросы, если вам нужна помощь о том, как работает переполнение стека. С WWW :: Mechanize вы не можете выполнить любой Javascript. Нет вызова этой функции.
Теги:

1 ответ

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 pro и нажмите кнопку загрузки. ;-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню