2011-01-04 13 views
13

Estoy tratando de analizar la siguiente estructura HTML con en perl. Necesito seleccionar todos los elementos dd que contienen el mensaje de clase y también una identificación. Todo lo que me gustaría que hiciera la secuencia de comandos es recorrer todos los elementos dd e imprimir la identificación del elemento dd, pero debe ignorar el primer elemento dd, ya que es estático y no cambiará.Análisis HTML en perl

Puede ser con cualquier módulo perl, siempre que se pueda instalar desde cpan para que sea más fácil para mí. No tengo mucha experiencia con perl y analizando html, así que cualquier sugerencia sería muy útil.

Gracias :) Estructura

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

¿Usted intentó [algo así] (http://lmctfy.org/html%20parser/)? – Ether

+0

Guau, ya había visto el de Google, pero eso es mucho mejor: P Pero sí, parece que hay muchos, pero no estoy seguro de a cuál ir. – Jack

+1

:) en general HTML :: El analizador es excelente, pero es posible que tenga necesidades específicas que lo indiquen en otro lugar ... también hay un buen archivo de preguntas similares que pueden brindarle algunos consejos útiles. – Ether

Respuesta

18

Algo como esto, rápida y fácil:

#! /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 es exactamente lo que quiero. :RE – Jack

8

Para consultar todas HTML::Parser o mejor aún HTML::TreeBuilder

Más sobre TreeBuilder.

+1

Lanzaré XML :: LibXML con selectores de XPath, pero prefiero los selectores CSS de Web :: Query y Mojo :: DOM. –