PHP में HTML/XML को पार्स और प्रोसेस कैसे करते हैं?




parsing xml-parsing (19)

एचटीएमएल / एक्सएमएल का विश्लेषण कैसे कर सकता है और इससे जानकारी निकाल सकता है?

https://code.i-harness.com


मूल एक्सएमएल एक्सटेंशन

मैं देशी XML एक्सटेंशन में से एक का उपयोग करना पसंद करता हूं क्योंकि वे PHP के साथ बंडल किए जाते हैं, आमतौर पर सभी तृतीय पक्ष libs से तेज़ होते हैं और मुझे मार्कअप पर आवश्यक सभी नियंत्रण देते हैं।

DOM

डीओएम एक्सटेंशन आपको PHP 5 के साथ डीओएम एपीआई के माध्यम से एक्सएमएल दस्तावेज़ों पर काम करने की अनुमति देता है। यह डब्ल्यू 3 सी के दस्तावेज़ ऑब्जेक्ट मॉडल कोर लेवल 3, एक मंच- और भाषा-तटस्थ इंटरफ़ेस का कार्यान्वयन है जो प्रोग्राम और स्क्रिप्ट को गतिशील रूप से एक्सेस और अपडेट करने की अनुमति देता है दस्तावेजों की सामग्री, संरचना और शैली।

डोम असली दुनिया (टूटी हुई) एचटीएमएल को पार्सिंग और संशोधित करने में सक्षम है और यह XPath क्वेरी कर सकता है। यह libxml पर आधारित है।

डीओएम के साथ उत्पादक होने में कुछ समय लगता है, लेकिन उस समय आईएमओ के लायक है। चूंकि डोम एक भाषा-अज्ञेय इंटरफ़ेस है, इसलिए आपको कई भाषाओं में कार्यान्वयन मिलेंगे, इसलिए यदि आपको अपनी प्रोग्रामिंग भाषा बदलने की ज़रूरत है, तो संभावना है कि आप पहले ही जानते होंगे कि उस भाषा के डोम एपीआई का उपयोग कैसे करें।

तत्व के href विशेषता को पकड़ने में एक मूल उपयोग उदाहरण पाया जा सकता है और एक सामान्य वैचारिक अवलोकन PHP में DOMDocument पर पाया जा सकता है

DOM एक्सटेंशन का उपयोग कैसे करें पर बड़े पैमाने पर कवर किया गया है , इसलिए यदि आप इसका उपयोग करना चुनते हैं, तो आप सुनिश्चित कर सकते हैं कि आपके द्वारा चलाए जाने वाले अधिकांश मुद्दों को खोज / ब्राउज़िंग स्टैक ओवरफ़्लो द्वारा हल किया जा सकता है।

XMLReader

एक्सएमएल रीडर एक्सटेंशन एक एक्सएमएल पुल पार्सर है। पाठक दस्तावेज़ धारा पर आगे बढ़ने वाले कर्सर के रूप में कार्य करता है और रास्ते में प्रत्येक नोड पर रोकता है।

XMLReader, जैसे DOM, libxml पर आधारित है। मुझे एचटीएमएल पार्सर मॉड्यूल को ट्रिगर करने के बारे में पता नहीं है, तो संभावना है कि टूटी हुई एचटीएमएल को पार्स करने के लिए एक्सएमएल रीडर का उपयोग कर डीओएम का उपयोग करने से कम मजबूत हो सकता है, जहां आप इसे स्पष्ट रूप से libxml के HTML पार्सर मॉड्यूल का उपयोग करने के लिए कह सकते हैं।

Php का उपयोग कर h1 टैग से सभी मान प्राप्त करने के लिए एक मूल उपयोग उदाहरण पाया जा सकता है

एक्सएमएल पार्सर

यह एक्सटेंशन आपको XML पार्सर्स बनाने देता है और फिर विभिन्न XML ईवेंट के लिए हैंडलर परिभाषित करता है। प्रत्येक एक्सएमएल पार्सर में कुछ पैरामीटर भी होते हैं जिन्हें आप समायोजित कर सकते हैं।

एक्सएमएल पार्सर लाइब्रेरी libxml पर भी आधारित है, और एक SAX शैली एक्सएमएल पुश पार्सर लागू करता है। यह डीओएम या सिंपलएक्सएमएल की तुलना में स्मृति प्रबंधन के लिए बेहतर विकल्प हो सकता है, लेकिन XMLReader द्वारा लागू पुल पार्सर की तुलना में काम करना अधिक कठिन होगा।

SimpleXml

SimpleXML एक्सटेंशन XML को किसी ऑब्जेक्ट में कनवर्ट करने के लिए एक बहुत ही सरल और आसानी से उपयोग करने योग्य टूलसेट प्रदान करता है जिसे सामान्य प्रॉपर्टी चयनकर्ताओं और सरणी इटरेटर के साथ संसाधित किया जा सकता है।

SimpleXML एक विकल्प है जब आप जानते हैं कि HTML मान्य एक्सएचटीएमएल है। यदि आपको टूटी हुई HTML को पार्स करने की आवश्यकता है, तो SimpleXml पर भी विचार न करें क्योंकि यह चकित होगा।

एक साधारण उपयोग उदाहरण सीआरयूडी नोड और एक्सएमएल फ़ाइल के नोड मानों के लिए एक सरल कार्यक्रम में पाया जा सकता है और PHP मैनुअल में कई अतिरिक्त उदाहरण हैं

तृतीय पक्ष पुस्तकालय (libxml आधारित)

यदि आप किसी तृतीय-पक्ष lib का उपयोग करना पसंद करते हैं, तो मैं एक lib का उपयोग करने का सुझाव libxml जो वास्तव में स्ट्रिंग पार्सिंग के बजाय नीचे DOM / libxml का उपयोग करता है।

FluentDom

FluentDOM PHP में DOMDocument के लिए एक jQuery- जैसे धाराप्रवाह XML इंटरफ़ेस प्रदान करता है। चयनकर्ता XPath या CSS में लिखे गए हैं (XPath कनवर्टर के लिए एक सीएसएस का उपयोग कर)। वर्तमान संस्करण डीओएम मानक इंटरफेस को कार्यान्वित करते हैं और डोम लिविंग स्टैंडर्ड से फीचर्स जोड़ते हैं। FluentDOM JSON, CSV, JsonML, RabbitFish और अन्य जैसे प्रारूप लोड कर सकता है। संगीतकार के माध्यम से स्थापित किया जा सकता है।

HtmlPageDom

W72 \ HtmlPageDom` HTML दस्तावेज़ों के आसान हेरफेर के लिए एक PHP लाइब्रेरी है जिसका उपयोग डोमक्रॉलर को DOM पेड़ के ट्रैवर्स के लिए सिम्फनी 2 घटकों की आवश्यकता है और HTML दस्तावेज़ों के डीओएम पेड़ में हेरफेर करने के तरीकों को जोड़कर इसे बढ़ाता है।

phpQuery (वर्षों के लिए अद्यतन नहीं)

phpQuery PHP5 में लिखी गई jQuery जावास्क्रिप्ट लाइब्रेरी पर आधारित एक सर्वर-साइड, चेन करने योग्य, CSS3 चयनकर्ता संचालित दस्तावेज़ ऑब्जेक्ट मॉडल (डीओएम) एपीआई है और अतिरिक्त कमांड लाइन इंटरफेस (सीएलआई) प्रदान करता है।

यह भी देखें: https://github.com/electrolinux/phpquery

Zend_Dom

Zend_Dom DOM दस्तावेज़ों और संरचनाओं के साथ काम करने के लिए टूल प्रदान करता है। वर्तमान में, हम Zend_Dom_Query प्रदान करते हैं, जो XPath और CSS चयनकर्ताओं का उपयोग करने वाले डीओएम दस्तावेजों की पूछताछ के लिए एक एकीकृत इंटरफ़ेस प्रदान करता है।

QueryPath

QueryPath XML और HTML में हेरफेर करने के लिए एक PHP लाइब्रेरी है। यह न केवल स्थानीय फाइलों के साथ ही वेब सेवाओं और डेटाबेस संसाधनों के साथ काम करने के लिए डिज़ाइन किया गया है। यह अधिकांश jQuery इंटरफ़ेस (सीएसएस-स्टाइल चयनकर्ताओं सहित) लागू करता है, लेकिन सर्वर-साइड उपयोग के लिए इसे बहुत अधिक ट्यून किया जाता है। संगीतकार के माध्यम से स्थापित किया जा सकता है।

fDOMDocument

fDOMDocument मानक चेतावनी को PHP चेतावनियों या नोटिस के बजाय त्रुटियों के सभी अवसरों पर अपवादों का उपयोग करने के लिए बढ़ाता है। वे सुविधा के लिए विभिन्न कस्टम तरीकों और शॉर्टकट भी जोड़ते हैं और डीओएम के उपयोग को सरल बनाते हैं।

sabre/xml

saber / xml एक लाइब्रेरी है जो एक्सएमएल रीडर और एक्सएमएलवाइटर कक्षाओं को एक सरल "एक्सएमएल टू ऑब्जेक्ट / सरणी" मैपिंग सिस्टम और डिज़ाइन पैटर्न बनाने के लिए लपेटती है और विस्तारित करती है। एक्सएमएल लिखना और पढ़ना एकल-पास है और इसलिए तेज़ हो सकता है और बड़ी एक्सएमएल फाइलों पर कम मेमोरी की आवश्यकता होती है।

FluidXML

FluidXML एक संक्षिप्त और धाराप्रवाह एपीआई के साथ एक्सएमएल में हेरफेर करने के लिए एक PHP लाइब्रेरी है। यह XPath और धाराप्रवाह प्रोग्रामिंग पैटर्न को मजेदार और प्रभावी बनाने का लाभ उठाता है।

तृतीय पक्ष (libxml- आधारित नहीं)

डीओएम / libxml पर निर्माण का लाभ यह है कि आपको बॉक्स से अच्छा प्रदर्शन मिलता है क्योंकि आप मूल एक्सटेंशन पर आधारित होते हैं। हालांकि, इस मार्ग से सभी तीसरे पक्ष के libs नीचे नहीं जाते हैं। उनमें से कुछ नीचे सूचीबद्ध हैं

PHP सरल एचटीएमएल डोम पार्सर

  • PHP5 + में लिखा गया एक HTML डोम पार्सर आपको HTML को एक बहुत ही आसान तरीके से हेरफेर करने देता है!
  • PHP 5+ की आवश्यकता है।
  • अवैध HTML का समर्थन करता है।
  • JQuery की तरह चयनकर्ताओं के साथ एक HTML पृष्ठ पर टैग खोजें।
  • एक पंक्ति में एचटीएमएल से सामग्री निकालें।

मैं आमतौर पर इस पार्सर की सिफारिश नहीं करता हूं। कोडेबेस बहुत भयानक है और पार्सर स्वयं धीमा और स्मृति भूख लगी है। सभी jQuery चयनकर्ता (जैसे कि बाल चयनकर्ता ) संभव नहीं हैं। Libxml आधारित पुस्तकालयों में से कोई भी इसे आसानी से बेहतर प्रदर्शन करना चाहिए।

PHP एचटीएमएल पार्सर

PHPHtmlParser एक साधारण, लचीला, एचटीएमएल पार्सर है जो आपको jQuery की तरह किसी भी सीएसएस चयनकर्ता का उपयोग करके टैग का चयन करने की अनुमति देता है। लक्ष्य उन उपकरणों के विकास में सहायता करना है, जिन्हें HTML को स्क्रैप करने का एक त्वरित, आसान तरीका चाहिए, चाहे वह मान्य है या नहीं! यह प्रोजेक्ट मूल रूप से सनरा / php-simple-html-dom-parser द्वारा समर्थित था लेकिन समर्थन बंद हो गया है, इसलिए यह प्रोजेक्ट मेरे पिछले काम का अनुकूलन है।

दोबारा, मैं इस पार्सर की सिफारिश नहीं करता। यह उच्च CPU उपयोग के साथ धीमा है। बनाई गई DOM ऑब्जेक्ट्स की स्मृति को साफ़ करने के लिए कोई फ़ंक्शन भी नहीं है। ये समस्याएं विशेष रूप से नेस्टेड लूप के साथ स्केल करती हैं। प्रलेखन स्वयं गलत और गलत वर्तनी है, 14 अप्रैल 16 के बाद से कोई फिक्स नहीं पड़ता है।

Ganon

  • एक सार्वभौमिक टोकनाइज़र और एचटीएमएल / एक्सएमएल / आरएसएस डोम पार्सर
    • तत्वों और उनके गुणों में हेरफेर करने की क्षमता
    • अमान्य HTML और UTF8 का समर्थन करता है
  • तत्वों पर उन्नत CSS3 जैसी क्वेरी कर सकते हैं (जैसे jQuery - नेमस्पेस समर्थित)
  • एक एचटीएमएल ब्यूटीफायर (जैसे एचटीएमएल टिडी)
    • सीएसएस और जावास्क्रिप्ट को छोटा करें
    • सॉर्ट करें गुण, चरित्र केस बदलें, सही इंडेंटेशन इत्यादि।
  • एक्सटेंसिबल
    • वर्तमान चरित्र / टोकन के आधार पर कॉलबैक का उपयोग कर दस्तावेज़ों को पार्स करना
    • आसान ओवरराइडिंग के लिए छोटे कार्यों में ऑपरेशन अलग-अलग होते हैं
  • तेज़ और आसान

कभी इसका इस्तेमाल नहीं किया। यह नहीं बता सकता कि यह कोई अच्छा है या नहीं।

एचटीएमएल 5

आप उपरोक्त का उपयोग एचटीएमएल 5 को पार्स करने के लिए कर सकते हैं, लेकिन मार्कअप एचटीएमएल 5 की अनुमति के कारण क्विर्क हो सकता है । तो एचटीएमएल 5 के लिए आप एक समर्पित पार्सर का उपयोग करने पर विचार करना चाहते हैं, जैसे

html5lib

प्रमुख डेस्कटॉप वेब ब्राउज़र के साथ अधिकतम संगतता के लिए WHATWG HTML5 विनिर्देश के आधार पर एक HTML पार्सर का एक पायथन और PHP कार्यान्वयन।

एक बार एचटीएमएल 5 को अंतिम रूप देने के बाद हम अधिक समर्पित पार्सर्स देख सकते हैं। W3 के शीर्षक वाले एचटीएमएल 5 पार्सिंग के लिए एक ब्लॉगपोस्ट भी है जो जांच के लायक है।

वेब सेवाएं

यदि आप प्रोग्रामिंग PHP की तरह महसूस नहीं करते हैं, तो आप वेब सेवाओं का भी उपयोग कर सकते हैं। आम तौर पर, मुझे इनके लिए बहुत कम उपयोगिता मिली, लेकिन यह सिर्फ मुझे और मेरे उपयोग के मामले हैं।

YQL

वाईक्यूएल वेब सेवा इंटरनेट पर विभिन्न स्रोतों से डेटा को क्वेरी, फ़िल्टर और गठबंधन करने में सक्षम बनाता है। वाईक्यूएल कथन में एसक्यूएल-जैसी सिंटैक्स है, जो डेटाबेस अनुभव के साथ किसी भी डेवलपर से परिचित है।

ScraperWiki

स्क्रैपविकि का बाहरी इंटरफ़ेस आपको उस फ़ॉर्म में डेटा निकालने की अनुमति देता है जिसे आप वेब पर या अपने स्वयं के अनुप्रयोगों में उपयोग के लिए चाहते हैं। आप किसी भी स्क्रैपर की स्थिति के बारे में जानकारी निकाल सकते हैं।

नियमित अभिव्यक्ति

अंतिम और कम से कम अनुशंसित , आप नियमित अभिव्यक्तियों के साथ HTML से डेटा निकाल सकते हैं। आम तौर पर एचटीएमएल पर नियमित अभिव्यक्तियों का उपयोग करके निराश किया जाता है।

मार्कअप से मेल खाने के लिए वेब पर पाए जाने वाले अधिकांश स्निपेट भंगुर होते हैं। ज्यादातर मामलों में वे केवल HTML के एक विशेष टुकड़े के लिए काम कर रहे हैं। छोटे मार्कअप परिवर्तन, कहीं भी व्हाइटस्पेस जोड़ने, या टैग में विशेषताओं को जोड़ने या बदलने से, RegEx ठीक से लिखा नहीं जाने पर विफल हो सकता है। HTML पर RegEx का उपयोग करने से पहले आपको पता होना चाहिए कि आप क्या कर रहे हैं।

एचटीएमएल पार्सर्स पहले ही एचटीएमएल के सिंटैक्टिकल नियमों को जानते हैं। आपके द्वारा लिखे गए प्रत्येक नए RegEx के लिए नियमित अभिव्यक्तियों को पढ़ाया जाना चाहिए। कुछ मामलों में RegEx ठीक है, लेकिन यह वास्तव में आपके उपयोग-मामले पर निर्भर करता है।

आप अधिक विश्वसनीय पार्सर्स लिख सकते हैं , लेकिन नियमित अभिव्यक्तियों के साथ एक पूर्ण और भरोसेमंद कस्टम पार्सर लिखना समय की बर्बादी है जब उपर्युक्त पुस्तकालय पहले से मौजूद हैं और इस पर एक बेहतर काम करते हैं।

पार्सिंग एचटीएमएल द कथुलू वे भी देखें

पुस्तकें

यदि आप कुछ पैसे खर्च करना चाहते हैं, तो एक नज़र डालें

मैं PHP वास्तुकार या लेखकों से संबद्ध नहीं हूं।


1 ए और 2 के लिए: मैं नई सिम्फनी कंपोनेट क्लास डोमक्रॉलर ( DomCrawler ) के लिए वोट DomCrawler । यह वर्ग सीएसएस चयनकर्ताओं के समान प्रश्नों की अनुमति देता है। असली दुनिया के उदाहरणों के लिए इस प्रस्तुति पर एक नज़र डालें: news-of-the-symfony2-world

घटक स्टैंडअलोन काम करने के लिए डिज़ाइन किया गया है और सिम्फनी के बिना इसका उपयोग किया जा सकता है।

एकमात्र कमी यह है कि यह केवल PHP 5.3 या नए के साथ काम करेगा।


SimpleHtmlDom के तृतीय पक्ष विकल्प जो स्ट्रिंग पार्सिंग के बजाय DOM का उपयोग करते हैं: phpQuery , Zend_Dom , QueryPath और FluentDom


आप किसी भी "टूटी हुई" एचटीएमएल को साफ करने और एचटीएमएल को एक्सएचटीएमएल में बदलने के लिए एचटीएमएल टिडी जैसे कुछ का उपयोग करने का प्रयास कर सकते हैं, जिसे आप एक्सएमएल पार्सर के साथ पार्स कर सकते हैं।


एक अन्य विकल्प जिसे आप कोशिश कर सकते हैं वह QueryPath । यह jQuery द्वारा प्रेरित है, लेकिन PHP में सर्वर पर और Drupal में उपयोग किया जाता है।


जेएसओएन और एक्सएम से सरणी तीन लाइनों में:

$xml = simplexml_load_string($xml_string);
$json = json_encode($xml);
$array = json_decode($json,TRUE);

ता दा!


बस DOMDocument->loadHTML() उपयोग करें और इसके साथ किया जाए। libxml का HTML पार्सिंग एल्गोरिदम काफी अच्छा और तेज़ है, और लोकप्रिय धारणा के विपरीत, विकृत HTML पर नहीं दबाता है।



मैंने HTML5DOMDocument नामक एक लाइब्रेरी बनाई है जो https://github.com/ivopetkov/html5-dom-document-php पर स्वतंत्र रूप से उपलब्ध है

यह क्वेरी चयनकर्ताओं का भी समर्थन करता है जो मुझे लगता है कि आपके मामले में बहुत मददगार होगा। यहां कुछ उदाहरण कोड दिया गया है:

$dom = new IvoPetkov\HTML5DOMDocument();
$dom->loadHTML('<!DOCTYPE html><html><body><h1>Hello</h1><div class="content">This is some text</div></body></html>');
echo $dom->querySelector('h1')->innerHTML;

मैंने एक सामान्य उद्देश्य एक्सएमएल पार्सर लिखा है जो आसानी से जीबी फाइलों को संभाल सकता है। यह XMLReader पर आधारित है और इसका उपयोग करना बहुत आसान है:

$source = new XmlExtractor("path/to/tag", "/path/to/file.xml");
foreach ($source as $tag) {
    echo $tag->field1;
    echo $tag->field2->subfield1;
}

यहां XmlExtractor रेपो है: XmlExtractor


यहां उल्लेख किया गया एक सामान्य दृष्टिकोण Tidy माध्यम से एचटीएमएल चलाने के लिए है, जिसे गारंटीकृत-वैध एक्सएचटीएमएल थूकने के लिए सेट किया जा सकता है। फिर आप उस पर किसी भी पुराने एक्सएमएल लाइब्रेरी का उपयोग कर सकते हैं।

लेकिन आपकी विशिष्ट समस्या के लिए, आपको इस प्रोजेक्ट पर एक नज़र डालना चाहिए: http://fivefilters.org/content-only/ - यह Readability एल्गोरिदम का एक संशोधित संस्करण है, जिसे केवल पाठ्य सामग्री निकालने के लिए डिज़ाइन किया गया है (हेडर नहीं और पाद लेख) एक पृष्ठ से।


सरल एचटीएमएल डोम एक महान ओपन-सोर्स पार्सर है:

simplehtmldom.sourceforge

यह किसी ऑब्जेक्ट उन्मुख तरीके से डीओएम तत्वों का इलाज करता है, और नए पुनरावृत्ति में गैर-अनुपालन कोड के लिए बहुत से कवरेज हैं। जावास्क्रिप्ट में कुछ शानदार कार्य भी हैं, जैसे कि "ढूंढें" फ़ंक्शन, जो उस टैग नाम के तत्वों के सभी उदाहरण वापस कर देगा।

मैंने इसे कई टूल में इस्तेमाल किया है, इसे कई अलग-अलग प्रकार के वेब पृष्ठों पर परीक्षण किया है, और मुझे लगता है कि यह बहुत अच्छा काम करता है।


हां आप उद्देश्य के लिए simple_html_dom का उपयोग कर सकते हैं। हालांकि मैंने simple_html_dom के साथ काफी काम किया है, खासकर वेब स्क्रैपिंग के लिए और इसे बहुत कमजोर पाया है। यह मूल नौकरी करता है लेकिन मैं इसे किसी भी तरह से अनुशंसा नहीं करूंगा।

मैंने इस उद्देश्य के लिए कभी भी कर्ल का उपयोग नहीं किया है, लेकिन मैंने जो सीखा है वह यह है कि कर्ल नौकरी को और अधिक कुशलता से कर सकता है और यह अधिक ठोस है।

कृपया इस लिंक को देखें: scraping-websites-with-curl


phpQuery और QueryPath धाराप्रवाह jQuery API को दोहराने में बेहद समान हैं। यही कारण है कि वे PHP में एचटीएमएल का सही ढंग से विश्लेषण करने के लिए सबसे आसान दृष्टिकोण हैं।

QueryPath के लिए उदाहरण

मूल रूप से आप पहले एक HTML स्ट्रिंग से एक क्वेरी करने योग्य DOM पेड़ बनाते हैं:

 $qp = qp("<html><body><h1>title</h1>..."); // or give filename or URL

परिणामस्वरूप ऑब्जेक्ट में HTML दस्तावेज़ का एक पूर्ण वृक्ष प्रतिनिधित्व होता है। इसे डीओएम विधियों का उपयोग करके पार किया जा सकता है। लेकिन सामान्य दृष्टिकोण सीएसएस चयनकर्ताओं जैसे jQuery में उपयोग करना है:

 $qp->find("div.classname")->children()->...;

 foreach ($qp->find("p img") as $img) {
     print qp($img)->attr("src");
 }

अधिकतर आप ->find() लिए सरल #id और .class या DIV टैग चयनकर्ताओं का उपयोग करना चाहते हैं। लेकिन आप XPath कथन का भी उपयोग XPath सकते हैं, जो कभी-कभी तेज़ होते हैं। इसके अलावा सामान्य jQuery विधियों जैसे- ->children() और ->text() और विशेष रूप से ->attr() सही HTML स्निपेट निकालने को सरल बनाते हैं। (और पहले से ही उनके एसजीएमएल इकाइयां डीकोड की गई हैं।)

 $qp->xpath("//div/p[1]");  // get first paragraph in a div

QueryPath भी नए टैग को स्ट्रीम ( ->append ) में इंजेक्शन करने की अनुमति देता है, और बाद में आउटपुट और अद्यतन दस्तावेज़ ( ->writeHTML ) को ->writeHTML । यह न केवल विकृत HTML को पार्स कर सकता है, बल्कि विभिन्न एक्सएमएल बोलीभाषाओं (नामस्थानों के साथ), और एचटीएमएल माइक्रोफॉर्मेट्स (एक्सएफएन, वीकार्ड) से भी डेटा निकाल सकता है।

 $qp->find("a[target=_blank]")->toggleClass("usability-blunder");

phpQuery या QueryPath?

आम तौर पर क्वेरी के हेरफेर के लिए क्वेरीरीथ बेहतर अनुकूल है। जबकि phpQuery भी कुछ छद्म AJAX विधियों (केवल HTTP अनुरोध) को jQuery के समान दिखने के लिए लागू करता है। ऐसा कहा जाता है कि phpQuery अक्सर QueryPath से अधिक तेज़ है (कम समग्र सुविधाओं की वजह से)।

मतभेदों के बारे में अधिक जानकारी के लिए tagbyte.org से वेबैक मशीन पर यह तुलना देखें। (मूल स्रोत गायब हो गया, इसलिए यहां एक इंटरनेट संग्रह लिंक है। हाँ, आप अभी भी गायब पृष्ठों, लोगों का पता लगा सकते हैं।)

और यहां एक व्यापक क्वेरीपैथ परिचय है

लाभ

  • सरलता और विश्वसनीयता
  • विकल्पों का उपयोग करने के लिए सरल ->find("a img, a object, div a")
  • उचित डेटा अनदेखा (नियमित अभिव्यक्ति grepping की तुलना में)

Symfony ढांचे में बंडल हैं जो HTML को पार्स कर सकते हैं, और आप XPath का उपयोग करने के बजाय DOM का चयन करने के लिए सीएसएस शैली का उपयोग XPath


XML_HTMLSax बल्कि स्थिर है - भले ही इसे और बनाए रखा न जाए। एचटीएमएल टिडी के माध्यम से एचटीएमएल को पाइप करने का एक और विकल्प हो सकता है और फिर इसे मानक एक्सएमएल टूल्स के साथ पार्स कर सकता है।


उन्नत एचटीएमएल डोम एक साधारण एचटीएमएल DOM प्रतिस्थापन है जो एक ही इंटरफ़ेस प्रदान करता है, लेकिन यह डोम-आधारित है जिसका अर्थ है कि संबंधित स्मृति समस्याओं में से कोई भी नहीं होता है।

इसमें jQuery एक्सटेंशन सहित पूर्ण सीएसएस समर्थन भी है।


FluidXML साथ आप FluidXML और सीएसएस चयनकर्ताओं का उपयोग कर एक्सएमएल क्वेरी और FluidXML कर सकते हैं।

$doc = fluidxml('<html>...</html>');

$title = $doc->query('//head/title')[0]->nodeValue;

$doc->query('//body/p', 'div.active', '#bgId')
        ->each(function($i, $node) {
            // $node is a DOMNode.
            $tag   = $node->nodeName;
            $text  = $node->nodeValue;
            $class = $node->getAttribute('class');
        });

FluidXML


आपको नियमित अभिव्यक्तियों का उपयोग क्यों नहीं करना चाहिए ?

सबसे पहले, एक आम गलत नामक: Regexps " पार्सिंग " HTML के लिए नहीं हैं। Regexes हालांकि डेटा " निकालने " कर सकते हैं। निकालने के लिए वे क्या बना रहे हैं। उचित एसजीएमएल टूलकिट्स या बेसलाइन एक्सएमएल पार्सर्स पर रेगेक्स एचटीएमएल निष्कर्षण की बड़ी कमी उनके वाक्य रचनात्मक प्रयास और विभिन्न विश्वसनीयता हैं।

विचार करें कि कुछ हद तक भरोसेमंद HTML निष्कर्षण regex बनाना:

<a\s+class="?playbutton\d?[^>]+id="(\d+)".+?    <a\s+class="[\w\s]*title
[\w\s]*"[^>]+href="(http://[^">]+)"[^>]*>([^<>]+)</a>.+?

एक साधारण phpQuery या QueryPath समकक्ष के मुकाबले कम पठनीय तरीका है:

$div->find(".stationcool a")->attr("title");

हालांकि विशिष्ट उपयोग के मामले हैं जहां वे मदद कर सकते हैं।

  • कई डोम ट्रैवर्सल फ्रंटेंड्स एचटीएमएल टिप्पणियों को प्रकट नहीं करते हैं <!-- , हालांकि कभी-कभी निष्कर्षण के लिए अधिक उपयोगी एंकर होते हैं। विशेष रूप से छद्म-एचटीएमएल विविधता <$var> या एसजीएमएल अवशेष regexps के साथ tame आसान है।
  • अक्सर नियमित अभिव्यक्ति पोस्ट प्रोसेसिंग को बचा सकते हैं। हालांकि एचटीएमएल इकाइयों को अक्सर मैन्युअल देखभाल करने की आवश्यकता होती है।
  • और आखिरकार, <img src = urls निकालने जैसे ई सरल कार्यों के लिए , वे वास्तव में एक संभावित उपकरण हैं। एसजीएमएल / एक्सएमएल पार्सर्स पर गति लाभ ज्यादातर इन बुनियादी निष्कर्षण प्रक्रियाओं के लिए खेलने के लिए आता है।

कभी-कभी नियमित अभिव्यक्तियों का उपयोग करके HTML के स्निपेट को पूर्व-निकालने के लिए भी सलाह दी जाती है /<!-- /<!--CONTENT-->(.+?)<!--END-->/ और सरल HTML पार्सर /<!--CONTENT-->(.+?)<!--END-->/ का उपयोग करके शेष को संसाधित करें।

नोट: मेरे पास वास्तव में यह app , जहां मैं वैकल्पिक रूप से एक्सएमएल पार्सिंग और नियमित अभिव्यक्तियों को नियोजित करता हूं। पिछले हफ्ते PyQuery पार्सिंग तोड़ दिया, और regex अभी भी काम किया। हाँ अजीब, और मैं इसे खुद समझा नहीं सकता। लेकिन ऐसा हुआ।
तो कृपया असली दुनिया के विचारों को मत छोड़ो, सिर्फ इसलिए कि यह regex = बुराई meme से मेल नहीं खाता है। लेकिन चलिए इसे भी ज्यादा वोट नहीं देते हैं। यह इस विषय के लिए सिर्फ एक sidenote है।







html-parsing