2011-01-04 10 views
13

다음과 같은 HTML 구조를 perl로 구문 분석하려고합니다. 클래스 메시지와 ID를 포함하는 모든 dd 요소를 선택해야합니다. 스크립트가해야 할 일은 모든 dd 요소를 반복하고 dd 요소의 id를 출력하는 것입니다.하지만 정적 요소 인 첫 번째 dd 요소는 무시해야하며 변경되지 않습니다.perl에서 HTML 구문 분석

cpan에서 쉽게 설치할 수있는 한 모든 펄 모듈이 가능합니다. 필자는 perl과 파싱에 대한 많은 경험이 없기 때문에 어떤 포인터라도 도움이 될 것입니다.

감사합니다 :)

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은 내가 원하는 것입니다. :디 – Jack

8

TreeBuilder에 더 나은 아직 HTML::TreeBuilder

HTML::Parser 봐 또는 되세요. 빠르고 쉽게 이런

+1

XPath 선택기를 사용하여 XML :: LibXML을 던지 겠지만 Web :: Query 및 Mojo :: DOM의 CSS 선택자를 선호합니다. –