Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Запрос данных с сервера скриптом


Автор: _Y_ 6.11.2010, 13:49
Здравствуйте! Не мог бы кто-нибудь из экспертов взглянуть на код страницы, основанной, судя по всему на  JavaScript?

Задача: Имеется публично доступная БД, с которой можно работать из браузера. К сожалению, работать можно только глазами или руками через copy-paste. А нужно програмно сравнивать результаты разных запросов и т.п.

Стал писать обращающуюся к серверу программу (на Java). Все получается, но распарсить страницу не удается. В исходном HTML нет информации, которую браузер показывает на экране. Возникло стойкое подозрение, что информация эта докачивается JavaScript-ом и вставляется в код HTML динамически.

К сожалению, моих скудных знаний JavaScript не хватает, чтобы разобраться как же это сделално. Задача разовая, но довольно срочная. Так что браться за книги и времени нет, да и становиться экспертом из-за одной задачи вроде странно.

Не будете ли любезны взглянуть на страницу и сказать что запрашивает скрипт у сервера? Может я смогу имитировать запрос в Java и парсить уже его?

Вот http://www.ncbi.nlm.nih.gov/nuccore/AY305497.1. Если открыть HTML код, сразу видно, что основной информации в нем нет. А вот для понимания откуда он там берется моих знаний не хватает.

Спасибо!


Автор: Dastan 6.11.2010, 14:52
http://www.ncbi.nlm.nih.gov/sviewer/viewer.fcgi?val=37703934&db=nuccore&dopt=genbank&extrafeat=976&fmt_mask=0&maxplex=1&retmode=html&log$=seqview&maxdownloadsize=1000000

это?

Автор: _Y_ 6.11.2010, 16:36
Цитата(Dastan @  6.11.2010,  14:52 Найти цитируемый пост)
это? 


Именно! А как его удается извлечь? Точнее, как его найти в тексте кода или где-то еще?

Автор: Dastan 6.11.2010, 16:56
Цитата(_Y_ @  6.11.2010,  16:36 Найти цитируемый пост)
Именно! А как его удается извлечь?

я смотрел в http://getfirebug.com/

Цитата(_Y_ @  6.11.2010,  16:36 Найти цитируемый пост)
Точнее, как его найти в тексте кода или где-то еще?

у меня сейчас времени нет, но могу подсказать

там есть такой код, параметры похожи
Код

<!-- meta -->
<meta name="ncbi_app" content="entrez" /><meta name="ncbi_db" content="nuccore" />
<meta name="ncbi_report" content="genbank" /><meta name="ncbi_format" content="html" />
<meta name="ncbi_pagesize" content="20" />
<meta name="ncbi_sortorder" content="default" /><meta name="ncbi_pageno" content="1" />
<meta name="ncbi_resultcount" content="1" />
<meta name="ncbi_op" content="retrieve" /><meta name="ncbi_pdid" content="genbank" />
<meta name="ncbi_sessionid" content="CE8824DBCD53F581_0149SID" />
<meta name="ncbi_uidlist" content="37703934" /><meta name="ncbi_filter" content="all" />
<meta name="ncbi_stat" content="false" />
<meta name="ncbi_hitstat" content="true" />


Код

<script type="text/javascript" src="/portal/portal3rc.fcgi/387882/js/194432/81765/35445/66022/31971/35962/33966/
33536/46401/54523/69007/81314/3423/111973/3452/47466/3302/3193/112020/54525/35426.js" snapshot="nuccore"></script>

вроде бы здесь формируется ссылка
Код

// create main part of URL to viewer (don't include report param)
    CreateUrl: function(FlatFileNode){
        // create URL to fetch report
        var x = Portal.Portlet.Sequence_ViewerReport;
        var dopt = this.getValue('dopt');
        if (x.master == 'false' && dopt.toLowerCase() == 'genbank'){ dopt = 'gbwithparts';}
        
        var URL =  "val=" + FlatFileNode.getAttribute('val')
          + "&db=" + this.getValue('db')
          + "&dopt=" + (dopt == "fasta_text" ? "fasta" : dopt)   
          + "&extrafeat=" + x.extrafeat
          + "&fmt_mask=" + x.fmt_mask
...

Автор: _Y_ 6.11.2010, 20:27
Dastan, спасибо, шаг вперед сделан. Но до финиша еще огого smile 

Цитата(Dastan @  6.11.2010,  16:56 Найти цитируемый пост)
я смотрел в firebug
 Для меня это, к сожалению, совершенно непонятно.

Цитата(Dastan @  6.11.2010,  16:56 Найти цитируемый пост)
там есть такой код, параметры похожи...
 Как понимать эти метатеги я тоже не знаю к сожалению.

Что касается самого скрипта, то формирование ссылки стало понятно, но вот как извлечь все данные для нее?

Как я понял конструкции
Код

var dopt = this.getValue('dopt');
this.getValue('db')

просто извлекают значения value из строк HTML
Код

<input name="EntrezSystem2.PEntrez.Nuccore.Sequence_ResultsPanel.SequenceViewer.Sequence_ViewerReport.db" sid="1" type="hidden" value="nuccore" />
<input name="EntrezSystem2.PEntrez.Nuccore.Sequence_ResultsPanel.SequenceViewer.Sequence_ViewerReport.dopt" sid="1" type="hidden" value="genbank" />


А вот разобраться откуда берется значение получаемое конструкцией FlatFileNode.getAttribute('val') и как формируются значения полей объекта x = Portal.Portlet.Sequence_ViewerReport; моих скудных знания javascript не хватило smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)