Jquery 如何使pQuery与格式稍有错误的HTML一起工作?

Jquery 如何使pQuery与格式稍有错误的HTML一起工作?,jquery,perl,screen-scraping,cpan,Jquery,Perl,Screen Scraping,Cpan,是jQuery JavaScript框架到Perl的一个实用端口,可用于屏幕抓取 pQuery对格式错误的HTML非常敏感。考虑下面的例子: use pQuery; my $html_malformed = "<html><head><title>foo</title></head><body>bar</body></html>>"; my $page = pQuery($html_malfo

是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";
使用pQuery;
我的$html_格式不正确=“foobar>”;
my$page=pQuery($html\u格式不正确);
我的$title=$page->find(“title”);
打印“标题为:”,$title->html“\n”;
pQuery在上面的示例中找不到title标记,因为格式错误的HTML中有双“
>

为了使基于pQuery的应用程序更能容忍格式错误的HTML,我需要在将HTML传递给pQuery之前对其进行预处理


从上面给出的代码片段开始,什么是最健壮的纯perl方式来清理HTML以使其能够解析:pQuery可以?

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

这就是您想要的吗

$html_malformed =~ r|<+(<.*?>)>+|$1|g;
$html|u格式错误=~r|+|$1|g;

我会在pQuery中报告这是一个bug。这里有一个解决方法:

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";
使用HTML::TreeBuilder;
使用质询;
我的$html_格式不正确=“foobar>”;
my$html\u cleaned=html::TreeBuilder->new\u from\u content($html\u格式错误);
我的$page=pQuery($html\u cleaned->as\u html);
$html_->delete;
我的$title=$page->find(“title”);
打印“标题为:”,$title->html“\n”;

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

对不起,我需要一个纯perl解决方案。现在问题已经澄清。无论如何,谢谢你的回答!:-)不,那只会抓住给出的例子。我在寻找一个更普遍的解决方案。