Как заставить pQuery работать со слегка искаженным HTML? - PullRequest
5 голосов
/ 09 октября 2010

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

pQuery не найдет тег заголовка в приведенном выше примере из-за двойного «>>» в искаженном HTML.

Чтобы сделать мой pQueryоснованные на приложениях, более терпимые к искаженному HTML, мне нужно предварительно обработать HTML, очистив его перед передачей в pQuery.

Начиная с приведенного выше фрагмента кода, какой самый надежный способ чистого Perl очистить HTML для его анализа: в pQuery?

Ответы [ 3 ]

4 голосов
/ 09 октября 2010

Я бы сообщил об этом как об ошибке в 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 голосов
/ 09 октября 2010

Попробуйте HTML::Tidy, который исправляет недопустимый HTML.

0 голосов
/ 09 октября 2010

это то, что вы хотите?

$html_malformed =~ r|<+(<.*?>)>+|$1|g;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...