2010-10-09 14 views
5

pQuery पर्ल को jQuery जावास्क्रिप्ट ढांचे का एक व्यावहारिक बंदरगाह है जिसका उपयोग स्क्रीन स्क्रैपिंग के लिए किया जा सकता है।मैं थोड़ा विकृत 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 को पूर्व-प्रोसेस करने की आवश्यकता है।

ऊपर दिए गए कोड खंड से शुरू करना, 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

क्षमा करें, लेकिन मुझे शुद्ध-पर्ल समाधान की आवश्यकता है। अब इस सवाल में स्पष्ट किया गया है। वैसे भी जवाब के लिए धन्यवाद! :-) – knorv

-1

क्या आप चाहते हैं?

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

नहीं, यह केवल उदाहरण को पकड़ लेगा। मैं एक और सामान्य समाधान की तलाश में हूं। – knorv