2

私はPerl-HTMLのことは初めてです。HTML テーブルからテキストとリンクの両方を取得しようとしています。

HTML 構造は次のとおりです。

<td>Td-Text
    <br>
    <a href="Link-I-Want" title="title-I-Want">A-Text</a>
</td>

私はそれを理解しましたWWW::Mechanizeは、パーツから必要なものを取得する最も簡単なモジュールですが<a>、 からテキストを取得する方法がわかりません<td><td>-Text各セルとそれに対応<a>-Textするハッシュ配列をペアにする必要があるため、2 つのタスクを連続して実行したいと考えてい

どんな助けでも大歓迎です!

Z禅

4

2 に答える 2

5

WWW::Mechanizeはリンクの抽出に優れていますが、他のテキストを取得する必要がある場合は、通常はHTML::TreeBuilderと組み合わせます。このようなもの:

use HTML::TreeBuilder;

my $tree = HTML::TreeBuilder->new_from_content($mech->content);

foreach my $td ($tree->look_down(_tag => 'td')) {

  # If there's no <a> in this <td>, then skip it:
  my $a = $td->look_down(_tag => 'a') or next;

  my $tdText = $td->as_text;
  my $aText  = $a->as_text;

  printf("td-text: %s\n a-text: %s\nhref: %s\ntitle: %s\n",
         $tdText, $aText, $a->attr('href'), $a->attr('title'));
}

<td>このコードの唯一の問題は、タグ内のすべてのテキストを必要としないことです。それをどのように修正するかはあなた次第です。が十分に一意である場合は、次の$aTextようにすることができます。

$tdText =~ s/\Q$aText\E.*//s;

最悪の場合、独自の関数を作成して必要なテキスト要素を抽出し、で停止する<br>必要があります (または停止ポイントを決定します)。

于 2010-09-10T22:36:12.053 に答える
0

HTML::TreeBuilder は、HTML ドキュメントを解析して情報を引き出す優れた方法であることがわかりました。この場合、次のようなものです。

use HTML::TreeBuilder;
my $page = get($URL);
my $tree = HTML::TreeBuilder->new_from_content($page);

foreach my $cell ($tree->look_down(_tag => "td")) {
   my $links = $cell->extract_links();
   foreach my $link (@$links) {
      print "href: ", $link->attr("href"), "; text: ", $link->as_text, "\n";
   }
}
$tree = $tree->delete;

資力

于 2010-09-10T21:31:57.860 に答える