首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图使用Perl中的HTML::TableExtract从HTML文件中提取表,但失败了

试图使用Perl中的HTML::TableExtract从HTML文件中提取表,但失败了
EN

Stack Overflow用户
提问于 2013-08-12 16:21:06
回答 1查看 2.6K关注 0票数 1

我试图从一个站点的表格中提取每个G蛋白偶联受体的信息,例如:

http://www.iuphar-db.org/DATABASE/ObjectDisplayForward?objectId=1&familyId=1

更具体地说,我想从列(Ligand,Sp.,Action,亲和,单位)中提取信息。目前,我一直在从提取中输出空文件,因此模块似乎没有识别我指定的表。这是我到目前为止编写的代码,它被设计用来遍历每个HTML文件,这些文件对应于每个G蛋白耦合受体的信息。

代码语言:javascript
复制
use warnings;
use strict;
use HTML::TableExtract;

my @names = `ls /home/wallakin/LINDA/ligands/iuphar/data/html`;

foreach (@names)
{
#Delete empty lines in HTML
open (IN, "</home/wallakin/LINDA/ligands/iuphar/data/html/$_") or die "Can't open html";
my @htmllines = <IN>;
close IN;
for (@htmllines)
{
    s/^\s*$// or s/^\s*//;
}
open (OUT, ">/home/wallakin/LINDA/ligands/iuphar/data/html2/$_");
print OUT @htmllines;
close OUT;

#Extract data from HTML tables based on column headers
my $te = HTML::TableExtract->new ( 
                    headers => [ qw(Ligand Sp. Action Affinity Units) ],
                    depth => 1,
                    count => 1


                    );


$te->parse_file("/home/wallakin/LINDA/ligands/iuphar/data/html2/$_");

my $output = $_;
$output =~ s/\.html/\.txt/g;
open (RESET, ">/home/wallakin/LINDA/ligands/iuphar/data/ligands/$output");
close RESET;
open (DATA, ">>/home/wallakin/LINDA/ligands/iuphar/data/ligands/$output");
binmode (DATA, ":utf8");
binmode (STDOUT, ":utf8");  


foreach my $ts ($te->tables)
{
    print "Table (", join(',', $ts->coords), "):\n";


    foreach my $row ($te->rows)
    {

        foreach ( grep {defined} @$row)
        {
            $_ =~ s/\n/\ /g;
            $_ =~ s/\r//g;  
            #$_ =~ s/\s+/ /g;
        }

        #Each column's data separated by tabs
        print DATA join ("\t", grep {defined} @$row),"\n";
    }
}
close DATA;
}

我之前写了一个程序(谢天谢地),它得到了我针对每个G蛋白偶联受体的所有HTML文件,并将其传递到这个程序中。我不确定我是否使用了正确的标题、深度或计数。

如果这篇文章听起来很愚蠢,我很抱歉,但总的来说,我对生物信息学和编程还是新手。谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-12 23:13:31

这似乎适用于您提供的URL:

代码语言:javascript
复制
use 5.014;
use strict;
use warnings;
use open qw(:std :utf8);

use HTML::TableExtract;

my $te = HTML::TableExtract->new(
    headers => [qw(Ligand Sp. Action Affinity Units Reference)],
);

$te->parse_file('sample.html');

my @tables = $te->tables;
for my $t (@tables) {
    my @rows = $t->rows;
    for my $r (@rows) {
        for my $c (@$r) {
            $c =~ s/\A\s+//;
            $c =~ s/\s+\z//;
        }
        say "@$r";
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18191944

复制
相关文章

相似问题

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