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

kno*_*orv 5 perl jquery 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";
Run Code Online (Sandbox Code Playgroud)

由于>>格式错误的HTML中的双" ",pQuery将无法在上面的示例中找到标题标记.

为了使我的基于pQuery的应用程序更容忍HTML格式错误,我需要通过清理它来预处理HTML,然后再将其传递给pQuery.

从上面给出的代码片段开始,什么是最健壮的pure-perl方法来清理HTML以使其解析:pQuery能够实现吗?

cjm*_*cjm 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";
Run Code Online (Sandbox Code Playgroud)

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