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实现吗?
答案 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;