繁体   English   中英

你如何处理Perl中格式错误的HTML?

[英]How do you handle malformed HTML in Perl?

我对一个解析器很感兴趣,该解析器可以处理格式错误的HTML页面,并在对它执行一些XPath查询之前将其转换为格式良好的HTML。 你知道吗?

您不应该使用XML解析器来解析HTML。 使用HTML解析器。

请注意,以下是完全有效的HTML(并且XML解析器会阻塞它):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Is this valid?</title>
</head>

<body>

<p>This is a paragraph

<table>

<tr>  <td>cell 1  <td>cell 2
<tr>  <td>cell 3  <td>cell 4

</table>

</body>

</html>

CPAN上有许多任务特定的(除了通用的)HTML解析器。 他们非常适合我使用各种非常混乱的(并且大部分时间都是无效的)HTML。

如果您可以指定要尝试解决的问题,则可以提供具体建议。

还有HTML :: TreeBuilder :: XPath ,它使用HTML :: Parser将文档解析为树,然后允许您使用XPath查询它。 我从未使用它,但看到Randal Schwartz的HTML Scraping with XPath

鉴于上面的HTML文件,以下简短脚本:

#!/usr/bin/perl

use strict; use warnings;

use HTML::TreeBuilder::XPath;
my $tree= HTML::TreeBuilder::XPath->new;

$tree->parse_file("valid.html");
my @td = $tree->findnodes_as_strings('//td');

print $_, "\n" for @td;

输出:

C:\Temp> z
cell 1
cell 2
cell 3
cell 4

这里的关键点是HTML解析器将文档解析为HTML文档(尽管我们能够使用XPath查询它)。

除非您想要了解有关轮子的更多信息 ,否则请使用HTML Tidy代码。

你可以改写这样的问题:

我对一个可能会出错的解析器很感兴趣 HTML页面 C源,并将其转化为良好的形式 HTML C源在执行之前 XPath查询 汇编和链接。 你知道吗?

现在问题可能更明显一点:这并不容易。 如果它确实是格式错误的HTML,您可能需要手动完成工作,直到它可以被输入HTML解析器。 然后,您可以使用此处提供的任何其他模块来完成工作。 尽管您可能以编程方式将原始HTML转换为严格有效的xhtml。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM