Я пытаюсь получить доступ и использовать разные страницы в 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";
}
Заранее спасибо!
Содержимое, которое вы ищете, генерируется 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";
}
Страница на 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, который вы можете ударить, вместо того, чтобы очищать экран от своего веб-сайта.