C++ में HTML पार्सिंग: DOM और XPath के साथ काम करने के लिए लाइब्रेरी और उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

C++ में HTML पार्सिंग: उपकरणों का अवलोकन और व्यावहारिक उदाहरण



C++ में HTML पार्सिंग एक ऐसा कार्य है जिसका सामना डेवलपर्स को वेब पेज पार्सर, कंटेंट विश्लेषक या स्वचालित डेटा संग्रह उपकरण बनाते समय करना पड़ता है। Python या JavaScript के विपरीत, C++ में HTML दस्तावेज़ों के साथ काम करने के लिए कोई अंतर्निहित लाइब्रेरी नहीं है, हालांकि कई परिपक्व और उच्च-प्रदर्शन वाले समाधान मौजूद हैं। इस लेख में, हम C++ में HTML पार्सिंग के लिए मुख्य लाइब्रेरी, उनकी विशेषताओं की समीक्षा करेंगे और कोड उदाहरण प्रस्तुत करेंगे।



C++ में HTML पार्सिंग के लिए मुख्य लाइब्रेरी



लाइब्रेरी का चुनाव आपके कार्यों पर निर्भर करता है: क्या CSS-सेलेक्टर, XPath, दूषित HTML के साथ काम करने की आवश्यकता है या अधिकतम गति चाहिए। आइए सबसे लोकप्रिय विकल्पों पर विचार करें।



  • Gumbo-parser — Google की लाइब्रेरी, जो विनिर्देश के अनुसार HTML5 पार्सिंग लागू करती है। यह पार्सिंग के बाद DOM ट्री प्रदान करती है, लेकिन इसमें सेलेक्टर द्वारा नेविगेशन के लिए अंतर्निहित साधन शामिल नहीं हैं। नोड्स की मैन्युअल ट्रैवर्सल की आवश्यकता होती है।
  • MyHTML — Gumbo का एक फोर्क जिसमें CSS-सेलेक्टर के लिए बेहतर समर्थन और अधिक सुविधाजनक API है। यह क्लास, टैग और एट्रीब्यूट द्वारा एलिमेंट खोजने की अनुमति देता है।
  • Lexbor — गति और मानकों के अनुपालन पर ध्यान केंद्रित करने वाली एक आधुनिक लाइब्रेरी। यह HTML और CSS-सेलेक्टर दोनों का समर्थन करती है, साथ ही (एक अतिरिक्त मॉड्यूल के माध्यम से) XPath का भी समर्थन करती है।
  • htmlcxx — HTML को ट्री में पार्स करने के लिए एक सरल लाइब्रेरी। यह छोटे प्रोजेक्ट के लिए उपयुक्त है, लेकिन HTML5 का समर्थन नहीं करती है।
  • Boost.PropertyTree (XML पार्सर के साथ) — XHTML को पार्स करने के लिए इस्तेमाल किया जा सकता है, लेकिन अमान्य HTML के लिए अभिप्रेत नहीं है।


स्थापना और कनेक्शन



दो सबसे लोकप्रिय लाइब्रेरी: Gumbo-parser और MyHTML की स्थापना पर विचार करें। C++17 प्रोजेक्ट के लिए, vcpkg या Conan पैकेज मैनेजर का उपयोग करने की अनुशंसा की जाती है।



// vcpkg के माध्यम से स्थापनाvcpkg install gumbo-parservcpkg install myhtml

// CMakeLists.txt में कनेक्शनfind_package(gumbo REQUIRED)target_link_libraries(your_project PRIVATE gumbo)

find_package(myhtml REQUIRED)target_link_libraries(your_project PRIVATE myhtml)


उदाहरण 1: Gumbo-parser के साथ HTML पार्सिंग (DOM की मैन्युअल ट्रैवर्सल)



इस उदाहरण में, हम एक सरल HTML दस्तावेज़ को पार्स करेंगे और <p> टैग से सभी टेक्स्ट निकालेंगे।



#include <iostream>#include <string>#include <gumbo.h>

void extract_text(GumboNode* node) { if (node->type == GUMBO_NODE_TEXT) { std::cout << node->v.text.text; return; } if (node->type == GUMBO_NODE_ELEMENT && node->v.element.tag == GUMBO_TAG_P) { // चाइल्ड नोड्स को प्रोसेस करें GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { extract_text(static_cast<GumboNode*>(children->data[i])); } std::cout << std::endl; return; } // अन्य एलिमेंट के लिए रिकर्सिव ट्रैवर्सल if (node->type == GUMBO_NODE_ELEMENT) { GumboVector* children = &node->v.element.children; for (unsigned int i = 0; i < children->length; ++i) { extract_text(static_cast<GumboNode*>(children->data[i])); } }}

int main() { std::string html = R"(<html><body><p>पहला पैराग्राफ</p><p>दूसरा पैराग्राफ</p></body></html>)"; GumboOutput* output = gumbo_parse(html.c_str()); extract_text(output->root); gumbo_destroy_output(&kGumboDefaultOptions, output); return 0;}


उदाहरण 2: CSS-सेलेक्टर के साथ MyHTML का उपयोग



MyHTML एलिमेंट खोजने के लिए अधिक सुविधाजनक इंटरफ़ेस प्रदान करता है। इस उदाहरण में, हम link क्लास वाले सभी लिंक ढूंढेंगे और उनकी href एट्रीब्यूट प्रदर्शित करेंगे।



अनुशंसाएँ