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

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";

由于格式错误的HTML中有双“>>”,因此pQuery在上面的示例中找不到标题标签。

为了使基于pQuery的应用程序更能容忍格式错误的HTML,我需要先对HTML进行清理,然后再将其传递给pQuery,以对其进行预处理。

从上面给出的代码片段开始,最可靠的纯perl方法来清理HTML以使其可被pQuery解析:

最佳答案

我将其报告为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作为其底层解析机制,但是它确实起作用。

关于jquery - 如何使pQuery与格式略有不同的HTML一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3896220/

10-09 21:42