2011-01-04 13 views
13

Sto cercando di analizzare la seguente struttura HTML con perl. Devo selezionare tutti gli elementi dd che contengono il messaggio di classe e anche un id. Tutto quello che mi piacerebbe che lo script facesse è scorrere tutti gli elementi di dd e stampare l'id dell'elemento dd ma ha bisogno di ignorare il primo elemento dd dato che è statico e non cambierà.Analisi HTML in perl

Può essere con qualsiasi modulo perl purché possa essere installato da cpan per renderlo più facile per me. Non ho molta esperienza con perl e parsing html quindi qualsiasi suggerimento sarebbe molto utile.

Grazie :) Struttura

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

Hai provato [qualcosa del genere] (http://lmctfy.org/html%20parser/)? – Ether

+0

Wow, ho visto quello di Google, ma questo è molto meglio: P Ma sì, sembra che ce ne siano molti, ma non sono sicuro di quale sia il caso. – Jack

+1

:) In generale HTML :: Parser è ottimo, ma potresti avere esigenze specifiche che ti indirizzano da qualche altra parte ... c'è anche un buon archivio di domande simili qui che possono darti alcuni consigli utili. – Ether

risposta

18

Qualcosa di simile, facile e veloce:

#! /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 è esattamente quello che voglio. : D – Jack

8

Date un'occhiata al HTML::Parser o meglio ancora HTML::TreeBuilder

più sul TreeBuilder.

+1

Lanciamo in XML :: LibXML con i selettori XPath, ma preferisco i selettori CSS di Web :: Query e Mojo :: DOM. –