2011-01-04 20 views
13

Aşağıdaki HTML yapısını perl ile ayrıştırmaya çalışıyorum. Sınıf mesajını içeren tüm dd öğelerini ve ayrıca bir kimliği seçmem gerekiyor. Komut dosyasının yapmasını istediğim, tüm dd öğelerinin arasında dolaşmak ve dd öğesinin kimliğini yazdırmaktır, ancak ilk dd öğesinin statik olduğu ve değişmeyeceği ilkesini yok sayması gerekir.HTML pars içinde ayrıştırma

Bana kolaylık sağlamak için cpan'dan yüklenebildiği sürece herhangi bir perl modülü ile olabilir. Perl ile çok fazla tecrübem yok ve html'yi ayrıştırarak herhangi bir işaretçiyi çok yardımcı olacaktı.

Thanks :)

HTML Yapısı:

<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

sen [böyle bir şey] denedin mi (http://lmctfy.org/html%20parser/)? – Ether

+0

Vay, google bir tane gördüm, ama thats sadece çok daha iyi: P Ama evet, bir sürü var gibi görünüyor ama hangisi ile gitmek emin değilim. – Jack

+1

:) Genel olarak HTML :: Ayrıştırıcı harika, ancak başka bir yere işaret eden özel ihtiyaçlarınız olabilir ... Burada da size bazı yararlı ipuçları veren benzer soruların iyi bir arşivi var. – Ether

cevap

18

şey,:

#! /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 istediğim şeydir. : D – Jack

8

TreeBuilder üzerinde daha iyisi HTML::TreeBuilder

Daha bir HTML::Parser bakmak veya var. Hızlı ve kolay böyle

+1

XML :: LibXML'yi XPath selektörleriyle ekleyeceğim, ancak Web :: Query ve Mojo :: DOM'un CSS Seçicilerini tercih ediyorum. –