2011-01-04 12 views
13

次のHTML構造をperlで解析しようとしています。クラスメッセージとidを含むdd要素のすべてを選択する必要があります。 私がスクリプトにしたいのは、すべてのdd要素をループしてdd要素のidを出力することですが、最初のdd要素を静的で無視して変更する必要はありません。perlでHTMLを解析する

cpanからインストールして簡単にインストールできるのであれば、どのperlモジュールでも使用できます。私はperlとHTMLの解析に多くの経験を持っていないので、どのポインタも非常に役立つでしょう。

感謝:)

HTMLの構造:

<pre><code> 
<html> 
<head> 
</head> 
<body> 
.....other elements 
    <div id="messages"> 
     <div class="header"></div> 
     <dl> 
      <dd class="message unread mc-friend mc-message">This is just a random message, do not parse</dd> 
      <dd id="msg2" class="message unread mc-message"> 
       Hello 
      </div> 
      <dd id="msg3" class="message unread mc-message"> 
       Hello 
      </dd> 
     </dl> 
    </div> 
</body> 
</html> 
</pre></code> 
+4

次の[このような何か](http://lmctfy.org/html%20parser/)をしてみてくださいましたか? – Ether

+0

うわー、私はGoogleのものを見ていたが、それはずっとうまくいった:Pしかし、はい、そこにたくさんあるようだが、私はどちらと一緒に行くのか分からない。 – Jack

+1

:)一般的にはHTML :: Parserは素晴らしいですが、別の場所にあなたを指し示す特定のニーズがあるかもしれません。ここにも同様の質問のアーカイブがあり便利なヒントを与えてくれるでしょう。 – Ether

答えて

18

何か、:

#! /usr/bin/perl 
use strict; 
use warnings; 

use Mojo::DOM; 

my $html = "Your HTML goes here"; 

my $dom = Mojo::DOM->new; 
$dom->parse($html); 
my $skip; 
for my $dd ($dom->find('dd[class*="message"]')->each) { 
    print $dd->attrs->{id}, "\n" if $skip++; 
} 
+1

Pefect、Mojo :: DOMはまさに私が欲しいものです。 :D – Jack

8

TreeBuilder上いっそHTML::TreeBuilder

もっとHTML::Parserを見たりしてもらいます。迅速かつ簡単に、このような

+1

私はXML :: LibXMLをXPathセレクタで投げますが、私はWeb :: QueryとMojo :: DOMのCSSセレクタを好んでいます。 –