3

私の目標は、次のサイトの「アゴニスト」、「アンタゴニスト」、および「アロステリック レギュレーター」というタイトルの表からリンクを抽出することです。

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

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";
}

このサイトの別のスレッド ( HTML テーブルからの Perl 解析リンク ) のサンプル コードを使用してみましたが、役に立ちませんでした。解析の問題なのかテーブル認識の問題なのかわかりません。提供されたヘルプは大歓迎です。ありがとう!

4

2 に答える 2

4

これをベース スクリプトとして試してください (リンクを取得するように変更するだけで済みます)。

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";
    }
}
于 2013-08-14T20:12:29.983 に答える
2

問題が何であるかを説明していません...何がうまくいかないのですか?何が$row->[0]含まれていますか?しかし、問題の一部は、TableExtract がデフォルトで未加工の html ではなく、「表示されている」テキストだけを返すことである可能性があります。おそらく、HTML::TableExtract で keep_html オプションを使用する必要があります。

于 2013-08-14T19:54:48.807 に答える