【问题标题】:HTML parsing in perlperl 中的 HTML 解析
【发布时间】: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 很棒,但是您可能有特定的需求,可以将您指向其他地方...这里也有一个很好的类似问题的存档,可能会给您一些有用的提示.

标签: html perl html-parsing


【解决方案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
猜你喜欢
  • 1970-01-01
  • 2011-10-10
  • 2012-10-26
  • 2015-07-02
  • 2012-10-25
  • 2012-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多