1

私はタンパク質を表す ID コードを持っています。タンパク質関連の情報を扱っているInterProというサイトがあります。その Web サイトの URL には、その特定のコードが含まれています。その URL のコードを変更することで、任意のタンパク質に関する情報を取得できます。Web から直接情報を取得するためのスクリプトを perl で開発しました。次のコードを使用しました

    my $uniprot= "P15700";
    my $resp= '';
    my $url= "http://wwwdev.ebi.ac.uk/interpro/ISearch?query=$uniprot+";
    my $file = "$uniprot";
    $resp = getstore( $url, $file ); 


exit;
}

この例では、P15700 はタンパク質の一意の ID であり、URL はhttp://wwwdev.ebi.ac.uk/interpro/ISearch?query=P15700+です。これで、html ページ全体が取得されます。しかし、「タンパク質ファミリーメンバーシップ」という見出しの下にあるそのページの特定の情報が必要です. この例のように、このリンクを開くと、タンパク質ファミリー メンバーシップの見出しの下に「Adenylate kinase」と書かれています。別の出力テキスト ファイルにその情報が必要なだけです。1 つの列には ID が表示され、もう 1 つの列にはタンパク質ファミリー メンバーシップの情報が表示されます。私は perl を初めて使用し、コンピューター サイエンスのバックグラウンドを持っていません。むしろ私は生物学者です。それで、上記のタスクがperlを使用して実行できるかどうかを知りたいです。はいの場合、どのように?誰かがこの問題を解決できるなら、私は感謝します。

4

4 に答える 4

4
use strictures;
use Web::Query 'wq';
my $w = wq 'http://wwwdev.ebi.ac.uk/interpro/ISearch?query=P15700+';
$w->find('.prot_fam a')->text;
# expression returns:
# (
#     'Adenylate kinase',
#     'UMP-CMP kinase',
# )
于 2012-05-18T16:08:23.510 に答える
2

これは、IMOがめったに良い考えではないWebページHTMLの解析に関連しています。ページはいつでも変更される可能性があり、それによりスクリプトが正しく機能しなくなります。それでも興味がある場合は、解決策を次に示します。

use Mojo::DOM;    
my $dom = Mojo::DOM->new($resp);
my $name = $dom->find('div.prot_fam a')->[0]->text;

$nameこれで、変数は文字列を保持しますAdenylate kinase

于 2012-05-18T15:53:15.657 に答える
0

Perl を使用してすべてを実行できます :)この特定の問題については、再帰的な Web ダウンロードと DOM コードに関するこの質問をご覧ください。

あなたはプログラマーではないので、これの多くはニュースになるでしょう。

まずDOMを理解しましょう。Web ページを表示するときにブラウザに組み込まれる HTML ツリーです。Firebugや同等のプラグイン、または Chrome や IE、Opera のビルトイン (使用しているものに関係なく)をいじって、DOM を十分に理解することができます。

したがって、このページに移動してその DOM を分析する必要があります。お探しの情報は<div class="prot_fam">要素内にあるようです。コードを書くために必要な情報はこれだけです。

D:\ :: more /t2 prot.pl
use strict;
use warnings;
use LWP::UserAgent;
use HTML::TreeBuilder::XPath;

my $url  = shift || die 'pass URL as argument!';
my $file = shift || die 'pass output filename as argument!';

my $ua = LWP::UserAgent->new;
my $rsp = $ua->mirror( $url, $file );
if ( ! $rsp->is_success ) {
  die $rsp->status_line;
}

my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse_file( $file ) or die;

print $_, "\n" for map $_->as_XML_indented,
$tree->findnodes(q( //div[@class='prot_fam'] ));

D:\ :: perl prot.pl http://wwwdev.ebi.ac.uk/interpro/ISearch?query=P15700 P15700.html
<div class="prot_fam">
  <div class="entry-parent">
    <div class="entry-parent">
     <a href="IEntrySummary?ac=IPR000850&amp;query=P15700">Adenylate kinase</a>
      <div class="entry-child-prot">
        <div class="entry-parent">
         <a href="IEntrySummary?ac=IPR006266&amp;query=P15700">UMP-CMP kinase</a>
        </div>
      </div>
    </div>
  </div>
</div>

を使用して別のサンプルを追加するMojo::DOM

use strict;
use warnings;
use LWP::UserAgent;
use Mojo::DOM;
my $url = shift || die 'URL!';
my $ua  = LWP::UserAgent->new;
my $rsp = $ua->get( $url );
my $dom = Mojo::DOM->new($rsp->content);
for ( $dom->find('div[class="prot_fam"]')->each ) {
    print $_->find('a'), "\n";
}
于 2012-05-18T15:53:14.790 に答える
0

魅力的ではありませんが、(HTML::Treebuilder モジュールに基づいて) 動作します。HTML を解析して情報を抽出する必要があります。この例では、結果は「result.txt」ファイルに csv として保存されます。

use LWP::Simple;
use HTML::TreeBuilder;

my $uniprot= "P15700";
my $url= "http://wwwdev.ebi.ac.uk/interpro/ISearch?query=$uniprot+";
my $resp = get( $url );

my $tree = HTML::TreeBuilder->new_from_content($resp);
my $first=$tree->look_down(_tag => 'div',class => 'prot_fam') ;
$first=$first->look_down(_tag => 'div',class => 'entry-parent');
$first=$first->look_down(_tag => 'div',class => 'entry-parent');
$first=$first->look_down(_tag => 'a');
open (FH,">>result.txt");
print FH $uniprot.";";
print FH $first->content_list;
print FH "\n";
close(FH);

編集: これは、多くの「uniprots」をチェックするためのバリアントです。sleepdelay で遊んでみる

use LWP::Simple;
use HTML::TreeBuilder;

my @ports=qw(Q9H4B7 Q96RI1 P04150 P35354 P23219 P61073 P0A3M6 Q8DR59 Q7CRA4 Q27738 P35367 P35367 P35367 P08172 P35367 P10275 P25021 P07550 P08588 P13945);

for (my $i=0;$i < scalar(@ports);$i++) {
my $url= "http://wwwdev.ebi.ac.uk/interpro/ISearch?query=".$ports[$i]."+";
my $resp = get( $url );

my $tree = HTML::TreeBuilder->new_from_content($resp);
my $first=$tree->look_down(_tag => 'div',class => 'prot_fam') ;
$first=$first->look_down(_tag => 'div',class => 'entry-parent');
$first=$first->look_down(_tag => 'div',class => 'entry-parent');
$first=$first->look_down(_tag => 'a');
open (FH,">>result.txt");
print FH $ports[$i].";";
print FH $first->content_list;
print FH "\n";
close(FH);
sleep 10;
}
于 2012-05-18T15:54:32.740 に答える