我对一个解析器感兴趣,该解析器可能会采用格式错误的HTML页面,并在对其执行一些XPath查询之前将其转换为格式良好的HTML。你知道吗?如何在Perl中处理格式错误的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查询它)。
除非您正在寻找learn more about wheels,否则请使用HTML Tidy代码。
由于Perl程序员可以使用过多的特定于任务的解析器,所以很少需要这种解析器。 – 2009-10-27 21:12:00
自从我上次使用Perl之后已经有5年了......猜测它的展示。 – AnonJr 2009-10-28 11:15:49
你可以改写这样的问题:
我感兴趣的,可以采取一个畸形
HTML页面C源代码,并把它的分析器进行入井前形成HTMLC源代码一些XPath查询编译和链接就可以了。你知道吗?
现在这个问题可能会更加明显:这并不容易。如果它真的是格式不正确的HTML,那么您可能需要手动完成这项工作,直到它可以被送入HTML解析器。然后,您可以使用此处介绍的任何其他模块来完成这项工作。尽管如此,你不可能以编程方式将原始HTML转换为严格有效的xhtml。
- 1. 浏览器如何处理格式错误的HTML?
- 2. Perl邮件错误处理
- 3. Perl中的非致命处理错误
- 4. HTML形式的错误处理
- 5. 如何处理Rails 2路由中的错误格式?
- 6. 处理格式错误的soap故障
- 7. 如何处理perl模块编译中的“未知错误”
- 8. 对于Win32 :: ODBC的Perl错误处理
- 9. Ruby的错误处理类似于Perl
- 10. 如何在AS3中处理来自HTML的IO错误启用文本错误
- 11. 如何处理子程序重新定义错误在Perl
- 12. 如何使用perl处理格式与unicode相似的文件?
- 13. 如何在swift 3中处理错误?
- 14. 如何在PHP中处理SoapClient错误
- 15. 如何处理嵌套形式?(错误:mechanize._form.ParseError:嵌套表格)
- 16. perl打开文件错误处理
- 17. Perl -Database-Connection Count /错误处理
- 18. 如何在Perl中为Windows处理$ <?
- 19. 在Perl中处理多行模式
- 20. 在C++中处理字符串错误时的错误处理
- 21. 如何在WCF中处理错误的SOAP错误?
- 22. HTML/XML中的JavaScript:格式错误
- 23. 如何处理Ionic2中的cloudboost错误?
- 24. 如何处理node.js中的错误?
- 25. 如何处理NSPersistentContainer.loadPersistentStores中的错误?
- 26. 如何处理yii中的错误
- 27. 如何处理WP7中的HttpWebRequest错误?
- 28. 如何处理antlr中的错误
- 29. 如何处理asyncjs中的错误?
- 30. 如何处理AngularJS中的错误
取决于你正在尝试做什么。我经常解析数十GB的乱码HTML源码,而不必担心这些。 – 2009-10-27 21:01:59
你最近怎么样?我尝试将XML :: XPath与LWP :: UserAgent结合使用,并且XML :: XPath因错误的错误而失败。也许你想发布你的策略作为答案。 – Geo 2009-10-27 21:24:44
答案取决于手头的具体任务。你的问题太模糊,无法给出具体的答案。但是,首先不要尝试将HTML解析为XML。使用HTML解析器。 – 2009-10-27 21:37:53