2010-10-09 15 views
5

pQuery是Perl的jQuery JavaScript框架的实用端口,可用于屏幕抓取。如何使pQuery能够使用稍微格式错误的HTML?

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,我需要在将它传递给pQuery之前清理它,以预处理HTML。

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

回答

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作为其底层解析机制,但它确实工作。

2

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

+0

对不起,但我需要一个纯粹的perl解决方案。现在在这个问题上已经澄清了。无论如何感谢您的答案! :-) – knorv 2010-10-09 15:53:17

-1

是你想要的吗?

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

不,这只会引起举例。我正在寻找更通用的解决方案。 – knorv 2010-10-09 16:11:40

相关问题