簡體   English   中英

使用perl的LWP讀取網頁-輸出與下載的html頁面不同

[英]Reading a webpage with perl's LWP - output differs from a downloaded html page

我嘗試訪問和使用NCBI中的其他頁面,例如
http://www.ncbi.nlm.nih.gov/nuccore/NM_000036但是,當我使用perl的LWP :: Simple'get'函數時,我得到的輸出與手動保存頁面時得到的輸出不一樣(使用firefox瀏覽器的“另存為html”選項)。 我從“獲取”功能獲取的內容缺少我所需的數據。

難道我做錯了什么? 我應該使用其他工具嗎?

我的腳本是:

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";

}

提前致謝!

http://www.ncbi.nlm.nih.gov/nuccore/NM_000036上的頁面執行了大量JavaScript處理,並且還動態加載了很多內容。 LWP :: UserAgent無法為您執行此操作,因為它無法運行JavaScript。

建議您使用Firebug或Chrome開發者工具查看瀏覽器中發生的情況。 您會看到它對此URL進行XHR請求: 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代碼,或者嘗試多個頁面並查看XHR的URL來弄清楚這一點。調用。

由於這可能是一項公共服務,並且我假設允許您使用這些數據,因此您應該考慮詢問他們是否具有可以點擊的適當API,而不是將其內容從屏幕上刮下來。

您要搜索的內容是由JavaScript生成的。 您需要解析HTML(從第一個響應中)並找到所需數據的ID:

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

接下來,您需要以以下形式對URL進行另一個請求: http : //www.ncbi.nlm.nih.gov/sviewer/viewer.fcgi?val=ID_YOU_HAVE

這樣的東西(未經測試!):我的$ 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";
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM