Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Perl中使用HTML::TableExtract和HTML::Extor从HTML表获取链接_Html_Perl_Hyperlink_Html Tableextract - Fatal编程技术网

在Perl中使用HTML::TableExtract和HTML::Extor从HTML表获取链接

在Perl中使用HTML::TableExtract和HTML::Extor从HTML表获取链接,html,perl,hyperlink,html-tableextract,Html,Perl,Hyperlink,Html Tableextract,我的目标是从以下站点中标题为“激动剂”、“拮抗剂”和“变构调节剂”的表格中提取链接: 我一直在使用HTML::TableExtract来提取表,但无法获取HTML::LinkExtor来检索相关链接。以下是我目前掌握的代码: use warnings; use strict; use HTML::TableExtract; use HTML::LinkExtor; my @names = `ls /home/wallakin/LINDA/ligands/iuphar/data/html2/`

我的目标是从以下站点中标题为“激动剂”、“拮抗剂”和“变构调节剂”的表格中提取链接:

我一直在使用HTML::TableExtract来提取表,但无法获取HTML::LinkExtor来检索相关链接。以下是我目前掌握的代码:

use warnings;
use strict;
use HTML::TableExtract;
use HTML::LinkExtor;

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

foreach (@names)
{
chomp ($_);

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

$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/links/$output") or die "Can't reset";
close RESET;
#open (DATA, ">>/home/wallakin/LINDA/ligands/iuphar/data/links/$output") or die "Can't append to file";

foreach my $ts ($te->tables)
{
    foreach my $row ($ts->rows)
    {
        $le->parse($row->[0]);
        for my $link_tag ( $le->links ) 
        {
            my %links = @$link_tag;
            print @$link_tag, "\n";
            }
        }
}
#print "Links extracted from $_\n";
}

我尝试使用这个站点()上另一个线程中的一些示例代码,但没有效果。我不确定这是解析问题还是表识别问题。如能提供任何帮助,我们将不胜感激。谢谢

你没有描述问题是什么……到底是什么不起作用?
$row->[0]
包含什么?但部分问题可能是TableExtract默认只返回“可见”文本,而不是原始html。您可能希望在html::TableExtract中使用keep_html选项。

尝试将此作为基本脚本(您只需要调整它以获取链接):


谢谢你的建议,但是我得到的输出没有链接。正如我说的,这是一个基本脚本,我不会为你做所有的工作。但是现在,你有了一个干净的基本脚本。啊,很抱歉误解了。我看看我能用这个做什么!WWW::Mechanize将为您处理链接解析<代码>我的$mech=WWW::Mechanize->new$机械->获取($url);我的@links=$mech->links您必须自己进行的表格提取。@AndyLester-这是一件在Mech中很有用的事情,能够仅提取某些元素内的链接/输入,或仅提取某些元素之前和/或之后的链接/输入。有时find_all_链接中当前的select参数还不够。同意,但现在我遇到了一个不同的问题,即链接返回到引用。由于我是一个完全的新手(我以前是一名生物化学家多年),我正在研究如何取消对数组的引用。我曾尝试在数组前面添加一个正斜杠(\),并将其分配给另一个,但也没有成功。有什么建议吗?谢谢@Wally-链接是对象,如WWW::Mechanize::Link文档中所述
$link->url\u abs()
以获取完整的url。非常感谢你们的努力,但我最终以穴居人的方式完成了工作,并使用正则表达式提取了与其他东西配对所需的链接。链接是唯一的,我可以这样做,所以问题解决了!
use warnings; use strict;
use HTML::TableExtract;
use HTML::LinkExtor;
use WWW::Mechanize;

use utf8;
binmode(STDIN, ":utf8");
binmode(STDOUT, ":utf8");
binmode(STDERR, ":utf8");

my $m = WWW::Mechanize->new( autocheck => 1, quiet => 0 );
$m->agent_alias("Linux Mozilla");
$m->cookie_jar({});

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

$te->parse(
    $m->get("http://tinyurl.com/jvwov9m")->content
);

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