我是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 );假设我查找“智人”,我将得到26,138个swissprot和919,192个TReMBL结果。我应该只解析HTML文档中的这些数字吗?这是如何工作的呢?
发布于 2015-02-10 23:04:00
您必须使用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) TrEMBLhttps://stackoverflow.com/questions/28433934
复制相似问题