2011-01-04 4 views
13

Ich versuche, die folgende HTML-Struktur mit in Perl zu analysieren. Ich muss alle dd Elemente auswählen, die die Klassennachricht und auch eine Identifikation enthalten. Ich möchte nur, dass das Skript alle dd-Elemente durchläuft und die ID des dd-Elements ausgibt, aber es muss das erste dd-Element ignorieren, da es statisch ist und sich nicht ändert.HTML-Parsing in Perl

Es kann mit jedem Perl-Modul sein, solange es von cpan installiert werden kann, um es mir einfach zu machen. Ich habe nicht viel Erfahrung mit Perl und Parsing HTML, so dass alle Zeiger sehr hilfreich wären.

HTML Struktur :) Danke:

<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

Haben Sie versucht, [so etwas wie dieses] (http://lmctfy.org/html%20parser/)? – Ether

+0

Wow, ich hatte die Google One gesehen, aber das ist einfach viel besser: P Aber ja, es scheint viele zu geben, aber ich bin mir nicht sicher, mit welchem ​​ich gehen soll. – Jack

+1

:) im Allgemeinen HTML :: Parser ist großartig, aber Sie haben vielleicht spezielle Bedürfnisse, die Sie irgendwo anders zeigen ... es gibt auch ein gutes Archiv von ähnlichen Fragen hier, die Ihnen einige nützliche Tipps geben können. – Ether

Antwort

18

So etwas wie dies, schnell und einfach:

#! /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 ist genau das, was ich will. : D – Jack

8

Werfen Sie einen Blick auf HTML::Parser oder besser noch HTML::TreeBuilder

Mehr zu TreeBuilder.

+1

Ich werde in XML :: LibXML mit XPath-Selektoren werfen, aber ich bevorzuge die CSS-Selektoren von Web :: Query und Mojo :: DOM. –