2010-10-09 9 views
5

pQuery jest pragmatycznym portem skryptu JavaScript jQuery do Perla, który może być używany do skriningu ekranu.Jak sprawić, aby program pQuery działał z lekko zniekształconym HTML?

pQuery dość wrażliwy na zniekształcony HTML. Rozważmy następujący przykład:

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 nie znajdziemy tagu tytułu w powyższym przykładzie z powodu podwójnego „>>” w zniekształconych HTML.

Aby moje aplikacje oparte na pQuery były bardziej odporne na zniekształcony kod HTML, muszę wstępnie przetworzyć kod HTML, czyszcząc go przed przekazaniem do pQuery.

Poczynając od fragmentu kodu podanego powyżej, jaki jest najsolidniejszy sposób czyszczenia w czystym kodzie HTML, aby był analizowany: w stanie przez pQuery?

Odpowiedz

4

Zgłaszałbym to jako błąd w pQuery. Oto obejście:

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

To nie ma wiele sensu, ponieważ pQuery korzysta już HTML::TreeBuilder jako podstawowego mechanizmu analizowania, ale to nie działa.

2

Wypróbuj HTML::Tidy, który naprawia nieprawidłowy kod HTML.

+0

Przepraszam, ale potrzebuję roztworu czystego perla. Zostało to wyjaśnione w pytaniu. Dziękuję za odpowiedź! :-) – knorv

-1

czy tego chcesz?

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

Nie, to by tylko złapało podany przykład. Szukam bardziej ogólnego rozwiązania. – knorv

Powiązane problemy