我是Perl的新手,很难理解如何从搜索结果中获取特定值。例如,我想知道uniprot搜索swiss-prot
和trembl
的结果数量。我的代码是这样的:
#use strict
#use warnings
use LWP::Simple;
print "organism name: ";
my $SPCount = <STDIN>;
chomp($SPCount);
$SPCount =~ s/ /%20/;
$url = 'http://www.uniprot.org/uniprot/?query='.$SPCount.'&sort=score';
my $quelltext = get( $url );
让我们说我寻找智人&#39;,我将得到26,138个swissprot和919,192个TReMBL结果。我应该只解析这些数字的HTML文档吗?这有什么作用?
答案 0 :(得分:4)
您必须使用CPAN上的解析器之一解析返回的HTML。我的第一个选择是HTML::TreeBuilder::XPath
,它是HTML::TreeBuilder
的子类,允许使用XPath表达式对结果数据结构进行寻址。
查看相关网页的HTML源代码,看起来您想要拥有<a>
属性id
和reviewed-filter
的两个unreviewed-filter
元素的内容。该计划演示了如何做到这一点。
use strict;
use warnings;
use 5.010;
use LWP::Simple;
use HTML::TreeBuilder::XPath;
STDOUT->autoflush;
my $organism = <> // 'homo sapiens';
chomp $organism;
$organism =~ s/ /%20/g;
my $url = "http://www.uniprot.org/uniprot/?query=$organism&sort=score";
my $tree = HTML::TreeBuilder::XPath->new_from_content( get( $url ) );
say "Organism Name: $organism";
say ' ', join ' ', $tree->findnodes_as_strings('//a[@id="reviewed-filter"]/node()');
say ' ', join ' ', $tree->findnodes_as_strings('//a[@id="unreviewed-filter"]/node()');
<强>输出强>
Organism Name: homo%20sapiens
Reviewed (26,138) Swiss-Prot
Unreviewed (919,192) TrEMBL