2011-01-04 56 views
13

Tôi đang cố gắng phân tích cú pháp cấu trúc HTML sau bằng perl. Tôi cần phải chọn tất cả các phần tử dd có chứa thông điệp lớp và cũng là một id. Tất cả những gì tôi muốn kịch bản cần làm là lặp qua tất cả các phần tử dd và in ra id của phần tử dd nhưng nó cần phải bỏ qua phần tử dd đầu tiên vì nó là tĩnh và sẽ không thay đổi.Phân tích cú pháp HTML trong perl

Nó có thể được với bất kỳ mô-đun perl miễn là nó có thể được cài đặt từ cpan để làm cho nó dễ dàng cho tôi. Tôi không có nhiều kinh nghiệm với perl và phân tích cú pháp html vì vậy bất kỳ con trỏ sẽ rất hữu ích.

Cảm ơn :) Cấu trúc

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

Bạn hãy thử [một cái gì đó như thế này] (http://lmctfy.org/html%20parser/)? – Ether

+0

Wow, tôi đã nhìn thấy google một, nhưng thats chỉ tốt hơn rất nhiều: P Nhưng có, có vẻ là rất nhiều người trong số họ nhưng tôi không chắc chắn mà một trong những đi với. – Jack

+1

:) nói chung HTML :: Trình phân tích rất tuyệt, nhưng bạn có thể có những nhu cầu cụ thể mà chỉ cho bạn ở một nơi khác ... đó cũng là một lưu trữ tốt các câu hỏi tương tự ở đây có thể cung cấp cho bạn một số mẹo hữu ích. – Ether

Trả lời

18

Something như thế này, nhanh chóng và dễ dàng:

#! /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 là chính xác những gì tôi muốn. : D – Jack

8

Có một cái nhìn tại HTML::Parser hoặc tốt hơn chưa HTML::TreeBuilder

Thông tin thêm về TreeBuilder.

+1

Tôi sẽ tung vào XML :: LibXML với bộ chọn XPath, nhưng tôi thích CSS Selectors của Web :: Query và Mojo :: DOM. –

Các vấn đề liên quan