Perl - 从URL获取特定信息

时间:2015-02-10 14:19:21

标签: perl url html-parsing

我是Perl的新手,很难理解如何从搜索结果中获取特定值。例如,我想知道uniprot搜索swiss-prottrembl的结果数量。我的代码是这样的:

#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文档吗?这有什么作用?

1 个答案:

答案 0 :(得分:4)

您必须使用CPAN上的解析器之一解析返回的HTML。我的第一个选择是HTML::TreeBuilder::XPath,它是HTML::TreeBuilder的子类,允许使用XPath表达式对结果数据结构进行寻址。

查看相关网页的HTML源代码,看起来您想要拥有<a>属性idreviewed-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