首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl -从URL获取特定信息

Perl -从URL获取特定信息
EN

Stack Overflow用户
提问于 2015-02-10 22:19:21
回答 1查看 60关注 0票数 1

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

代码语言:javascript
复制
#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文档中的这些数字吗?这是如何工作的呢?

EN

回答 1

Stack Overflow用户

发布于 2015-02-10 23:04:00

您必须使用CPAN上的一个解析器来解析返回的HTML。我的首选是HTML::TreeBuilder::XPath,它是HTML::TreeBuilder的一个子类,允许使用XPath表达式处理结果数据结构。

查看相关页面的HTML源,看起来您需要两个<a>元素的内容,这两个元素具有id属性reviewed-filterunreviewed-filter。这个程序演示了如何做到这一点。

代码语言:javascript
复制
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()');

输出

代码语言:javascript
复制
Organism Name: homo%20sapiens
  Reviewed (26,138) Swiss-Prot
  Unreviewed (919,192) TrEMBL
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28433934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档