Чтение веб-страницы с помощью Perl LWP - вывод отличается от загруженной HTML-страницы

0

Я пытаюсь получить доступ и использовать разные страницы в NCBI, например,
http://www.ncbi.nlm.nih.gov/nuccore/NM_000036 Однако, когда я использовал perl LWP :: Simple 'get', я не получаю тот же вывод, который я получаю, когда я сохраняю страницу вручную (с помощью Firefox-браузер "сохранить как html"). То, что я получаю от функции get, не хватает данных, которые мне нужны.

Я делаю что-то неправильно? Должен ли я использовать другой инструмент?

Мой скрипт:

use strict;
use warnings;
use LWP::Simple;


my $input_name='GENES.txt';

open (INPUT, $input_name ) || die "unable to open $input_name";
open (OUTPUT,'>', 'Selected_Genes')|| die;

my $line;


while ($line = <INPUT>)
{

    chomp $line;
    print OUTPUT '>'.$line."\n";
    my $URL='http://www.ncbi.nlm.nih.gov/nuccore/'.$line;
#e.g:
#$URL=http://www.ncbi.nlm.nih.gov/nuccore/NM_000036

    my $text=gets($URL);
    print $text."\n";   
    $text=~m!\r?\n\r?\s+\/translation="((?:(?:[^"])\r?\n?\r?)*)"!;
    print OUTPUT $1."\n";

}

Заранее спасибо!

Теги:
lwp
ncbi

2 ответа

1
Лучший ответ

Содержимое, которое вы ищете, генерируется JavaScript. Вам необходимо проанализировать ваш HTML (с первого ответа) и найти идентификатор для данных, которые вы хотите:

<meta name="ncbi_uidlist" content="289547499" />

Затем вам нужно сделать другой запрос по URL-адресу в форме: http://www.ncbi.nlm.nih.gov/sviewer/viewer.fcgi?val=ID_YOU_HAVE

Что-то вроде этого (untested!): My $ URL = ' http://www.ncbi.nlm.nih.gov/nuccore/ '. $ Line;

my $html=gets($URL);

my ($id) = $html =~m{name="ncbi_uidlist" \s+ content="([^"]+)"}xi;
if ($id) {
    $html=gets( "http://www.ncbi.nlm.nih.gov/sviewer/viewer.fcgi?val=" . $id );
    $text=~m!\r?\n\r?\s+\/translation="((?:(?:[^"])\r?\n?\r?)*)"!;
    print OUTPUT $1."\n";
}
3

Страница на http://www.ncbi.nlm.nih.gov/nuccore/NM_000036 делает много обработки JavaScript, а также загружает кучу вещей динамически. LWP :: UserAgent не делает этого для вас, поскольку он не может запускать JavaScript.

Я предлагаю вам взглянуть на то, что происходит в вашем браузере, Firebug или Chrome Developer Tools. Вы увидите, что это запрос XHR на этот URL: http://www.ncbi.nlm.nih.gov/sviewer/viewer.fcgi?val=289547499&db=nuccore&dopt=genbank&extrafeat=976&fmt_mask=0&retmode=html&withmarkup=on&log $ = seqview & maxdownloadsize = 1000000

Теперь я не уверен, как эти параметры переводятся в NM_000036, но вы должны понять это, посмотрев на какой-то код JS, который выполняется на странице, или попробуйте несколько страниц и посмотрите URL-адреса XHR звонки.

Поскольку это, вероятно, общедоступная служба, и я предполагаю, что вам разрешено принимать эти данные, вам следует подумать о том, есть ли у них надлежащий API, который вы можете ударить, вместо того, чтобы очищать экран от своего веб-сайта.

Ещё вопросы

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