perl 中的 HTML 解析
Posted
技术标签:
【中文标题】perl 中的 HTML 解析【英文标题】:HTML parsing in perl 【发布时间】:2011-06-03 15:30:34 【问题描述】:我正在尝试使用 perl 解析以下 html 结构。我需要选择所有包含类消息和 id 的 dd 元素。 我希望脚本做的只是遍历所有 dd 元素并打印出 dd 元素的 id,但它需要忽略第一个 dd 元素,因为它是静态的并且不会改变。
它可以与任何 perl 模块一起使用,只要它可以从 cpan 安装以方便我。我在 perl 和解析 html 方面没有太多经验,所以任何指针都会很有帮助。
谢谢:)
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>
【问题讨论】:
:) 一般来说 HTML::Parser 很棒,但是您可能有特定的需求,可以将您指向其他地方...这里也有一个很好的类似问题的存档,可能会给您一些有用的提示. 【参考方案1】:看看HTML::Parser 或者更好的是HTML::TreeBuilder
更多关于TreeBuilder。
【讨论】:
我会在 XML::LibXML 中加入 XPath 选择器,但我更喜欢 Web::Query 和 Mojo::DOM 的 CSS 选择器。【参考方案2】:类似这样,快速简单:
#! /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++;
【讨论】:
完美,Mojo::DOM 正是我想要的。 :D以上是关于perl 中的 HTML 解析的主要内容,如果未能解决你的问题,请参考以下文章