如何让pQuery使用格式错误的HTML?

时间:2010-10-09 15:39:57

标签: jquery perl screen-scraping cpan

pQuery是Perl的jQuery JavaScript框架的实用端口,可用于屏幕抓取。

pQuery对格式错误的HTML非常敏感。请考虑以下示例:

use pQuery;

my $html_malformed = "<html><head><title>foo</title></head><body>bar</body></html>>";
my $page = pQuery($html_malformed);
my $title = $page->find("title");
print "The title is: ", $title->html, "\n";

pQuery在上面的示例中找不到标题标记,因为格式错误的HTML中出现了双“>>”。

为了让我的基于pQuery的应用程序更容忍HTML格式错误,我需要在将HTML传递给pQuery之前通过清理来预处理HTML。

从上面给出的代码片段开始,清理HTML以使其解析的最强大的纯perl方法是什么:能够通过pQuery实现吗?

3 个答案:

答案 0 :(得分:4)

我将此报告为pQuery中的错误。这是一个解决方法:

use HTML::TreeBuilder;
use pQuery;

my $html_malformed = "<html><head><title>foo</title></head><body>bar</body></html>>";
my $html_cleaned = HTML::TreeBuilder->new_from_content($html_malformed);
my $page = pQuery($html_cleaned->as_HTML);
$html_cleaned->delete;
my $title = $page->find("title");
print "The title is: ", $title->html, "\n";

这没有多大意义,因为pQuery已经使用HTML::TreeBuilder作为其底层解析机制,但它确实有效。

答案 1 :(得分:2)

尝试HTML::Tidy,修复无效的HTML。

答案 2 :(得分:-1)

是你想要的吗?

$html_malformed =~ r|<+(<.*?>)>+|$1|g;