एचटीएमएल पार्सिंग क्या है?
Scrapeless Universal Scraping API सार्वजनिक पृष्ठ एचटीएमएल को पुनर्प्राप्त करता है और रेंडर करता है जिसे डाउनस्ट्रीम पार्सर क्वेरी करने योग्य दस्तावेज़ ट्री में बदल सकते हैं।
TL;DR
- एचटीएमएल पार्सिंग मार्कअप को एक दस्तावेज़ ट्री में बदलता है। तत्व, विशेषताएँ, पाठ, और टिप्पणियाँ ऐसे नोड बन जाते हैं जिनमें कोड नेविगेट या क्वेरी कर सकता है।
- एचटीएमएल अपनी खुद की त्रुटि-हैंडलिंग नियमों का उपयोग करता है। ब्राउज़र ऐसे मार्कअप से उपयोगी डोम बना सकते हैं जो XML के रूप में ठीक से निर्मित नहीं होगा।
- पार्सिंग पृष्ठ जावास्क्रिप्ट को निष्पादित नहीं करता है। एक पार्सर द्वारा प्रदान किया गया मार्कअप पढ़ा जाता है; पोस्ट-रेंडर डोम प्राप्त करने के लिए एक ब्राउज़र रनटाइम की आवश्यकता हो सकती है।
- चयनकर्ता पार्सिंग के बाद कार्य करते हैं। CSS चयनकर्ता और XPath पेड़ में नोड खोजने के लिए होते हैं; निष्कर्षण तब उनके मान पढ़ता है और सामान्यीकृत करता है।
एचटीएमएल पार्सिंग एचटीएमएल स्रोत को पढ़ने और एक संरचित दस्तावेज़ ट्री बनाने की प्रक्रिया है। परिणाम एक दस्तावेज़ ऑब्जेक्ट मॉडल, या डोम है, जिसमें तत्व नोड, पाठ नोड, विशेषताएँ, टिप्पणियाँ, और माता-पिता, बच्चों और भाई-बहनों के बीच संबंध शामिल हैं।
द WHATWG HTML मानक पाठ/एचटीएमएल संसाधनों के लिए टोकनीकरण और पेड़-निर्माण व्यवहार को परिभाषित करता है। ये नियम बताते हैं कि स्रोत मार्कअप और परिणामी डोम संबंधित होते हैं लेकिन हमेशा समान नहीं होते।
एचटीएमएल पार्सिंग कैसे काम करता है?
एचटीएमएल पार्सिंग मार्कअप को टोकनीकृत करता है और डोम बनाने के लिए पेड़-निर्माण नियमों को लागू करता है।
- अक्षर पढ़ें। पार्सर एचटीएमएल इनपुट को एक स्ट्रीम के रूप में खपत करता है।
- टोकन बनाएं। स्टार्ट टैग, एंड टैग, टेक्स्ट, टिप्पणियाँ, और डॉकटाइप घोषणाएँ टोकन बन जाती हैं।
- पेड़ बनाएँ। सम्मिलन मोड और ओपन-एलिमेंट नियम तय करते हैं कि प्रत्येक टोकन कहाँ belongs।
- सही पुनर्प्राप्त करने योग्य मार्कअप। पार्सर तत्वों को लागू कर सकता है, खुले तत्वों को बंद कर सकता है, या मानक के अनुसार नोड्स को फिर से स्थानांतरित कर सकता है।
- डोम को उजागर करें। कोड परिणामी नोड्स को नेविगेट कर सकता है या समर्थित चयनकर्ता एपीआई के साथ उन्हें क्वेरी कर सकता है।
एचटीएमएल पार्सिंग बनाम रेंडरिंग
पार्सिंग दस्तावेज़ ट्री बनाता है; रेंडरिंग लेआउट की गणना करता है और दृश्य पृष्ठ को चित्रित करता है।
| स्टेज | इनपुट | आउटपुट |
|---|---|---|
| फेचिंग | यूआरएल और अनुरोध सेटिंग्स | HTTP प्रतिक्रिया बाइट्स |
| पार्सिंग | एचटीएमएल पाठ | डोम ट्री |
| स्क्रिप्ट निष्पादन | डोम और जावास्क्रिप्ट | संभवतः संशोधित डोम |
| रेंडरिंग | डोम, सीएसएस, लेआउट राज्य | पिक्सल और इंटरैक्टिव प्रदर्शन |
| निष्कर्षण | DOM या संरचित प्रतिक्रिया | चुने गए रिकॉर्ड |
MDN का ब्राउज़र पाइपलाइन गाइड टोकनाइजेशन, पेड़ निर्माण, और पार्सिंग और ब्लॉकिंग स्क्रिप्ट के बीच की बातचीत का वर्णन करता है।
इन-मेमोरी स्ट्रिंग्स के लिए, DOMParser.parseFromString() HTML या XML स्रोत को डोक्यूमेंट में बदलने के लिए ब्राउज़र API आकार दिखाता है।
HTML पार्सिंग वेब स्क्रैपिंग के लिए क्यों महत्वपूर्ण है?
HTML पार्सिंग स्क्रैपर्स को एक संरचनात्मक मॉडल देती है जो कच्चे मार्कअप को सीधे पाठ के रूप में खोजने की तुलना में अधिक सुरक्षित और सटीक है।
क्षेत्र चयन
संरचना और विशेषताओं द्वारा उत्पाद कार्ड, हेडलाइंस, तालिकाएँ, लिंक, और मेटाडेटा का स्थान निर्धारित करें।
पाठ की सफाई
टैग, टिप्पणियाँ, या असंबंधित नेविगेशन मार्कअप के बिना पाठ सामग्री पढ़ें।
लिंक समाधान
_href_ विशेषताओं को निकालें और दस्तावेज़ आधार के खिलाफ सापेक्ष URLs को हल करें।
सामग्री मान्यता
यह जांचें कि आवश्यक तत्व मौजूद हैं और चयनित नोड्स के अपेक्षित संबंध हैं।
आम HTML पार्सिंग गलतियाँ
अधिकांश पार्सिंग विफलताएँ गलत इनपुट, XML नियमों का मान लेना, या निष्कर्षण को नाजुक लेआउट विवरणों के साथ युग्मित करने से आती हैं।
- डेटा बाद में प्रकट होने पर प्रारंभिक प्रतिक्रिया का पार्सिंग करना। जब जावास्क्रिप्ट सामग्री बनाती है तब रेंडर की गई DOM या संरचित नेटवर्क प्रतिक्रिया की जांच करें।
- HTML को अच्छी तरह से बने XML के रूप में मान लेना। क्योंकि HTML की भिन्न सुधार नियम होती हैं, इसलिए टेक्स्ट/HTML के लिए एक HTML पार्सर का उपयोग करें।
- विस्तृत नियमित अभिव्यक्तियों के साथ मार्कअप खोजें। पेड़ पार्स करें, फिर संरचना और स्थिर विशेषताओं द्वारा नोड्स का चयन करें।
- मान लेना कि प्रत्येक पृष्ठ में प्रत्येक मॉड्यूल है। वैकल्पिक तत्वों को nullable के रूप में मॉडल करें और निष्कर्षण से पहले पृष्ठ प्रकारों को मान्य करें।
टोकनाइजेशन के दौरान क्या होता है?
टोकनाइजेशन इनपुट वर्ण स्ट्रीम को पढ़ता है और प्रारंभ टैग, अंत टैग, वर्ण डेटा, टिप्पणियाँ, और दस्तावेज़ प्रकार जैसे निर्माणों को पहचानता है। टोकनाइज़र स्थिति बनाए रखता है क्योंकि समान वर्ण सामान्य पाठ, विशेषता मान, टिप्पणियाँ, कच्चे पाठ तत्वों, या स्क्रिप्ट डेटा में भिन्न अर्थ रख सकते हैं।
पात्र संदर्भ HTML नियमों के अनुसार हल किए जाते हैं, विशेषताएँ टैग टोकनों के साथ संलग्न होती हैं, और पार्स एरर्स बिना दस्तावेज़ को रोकने की आवश्यकता के बिना प्रबंधित किए जाते हैं। यह व्यवहार एक कारण है कि HTML पार्सर सरल स्ट्रिंग स्प्लिटिंग की तुलना में वरीयता प्राप्त करता है। स्क्रिप्ट के भीतर एक छोटी से तारांकन चिह्न या पाठ में एक एंपरसेंड संदर्भ की कमी के बिना सही तरीके से व्याख्या नहीं किया जा सकता।
टोकनाइजेशन अकेले अंतिम तत्व श्रेणी का निर्माण नहीं करता है। टोकन पेड़-निर्माण चरण को खिलाते हैं, जो यह तय करता है कि नोड्स कहाँ संबंधित हैं और कैसे गलत तरीके से बने या छोड़े गए मार्कअप दस्तावेज़ की संरचना को प्रभावित करते हैं।
पेड़ निर्माण HTML को कैसे सही करता है?
पेड़ निर्माण उद्घाटन मोड और खुली तत्वों का एक स्टैक का उपयोग करके DOM बनाता है। एल्गोरिदम गायब तत्वों का संकेत दे सकता है, जब एक नया टोकन पिछले नेस्टिंग को अमान्य बना देता है तो तत्व बंद कर सकता है, और तालिकाओं जैसे विशेष संदर्भों को संभाल सकता है। इसके परिणामस्वरूप, DOM उन नोड्स या संबंधों को प्राप्त कर सकता है जो स्रोत पाठ में स्पष्ट रूप से नहीं लिखे गए थे।
तालिका मार्कअप एक सामान्य उदाहरण है। एक अमान्य स्थान में रखा गया सामग्री पार्सिंग नियमों के अनुसार स्थानांतरित किया जा सकता है। पैराग्राफ तत्व भी तब निहित रूप से बंद हो सकते हैं जब कुछ ब्लॉक-स्तरीय तत्व शुरू होते हैं। निष्कर्षण तर्क को पार्स किए गए पेड़ की जांच करनी चाहिए न कि इंडेंटेशन या स्रोत मार्कअप के त्वरित पढ़ने से नेस्टिंग का अनुमान लगाना चाहिए।
विभिन्न पार्सर पुस्तकालय HTML मानक को लागू करने का प्रयास करते हैं लेकिन विभिन्न API और अनुपालन के स्तर को उजागर कर सकते हैं। यदि सही पेड़ आकार पाइपलाइन के लिए महत्वपूर्ण है तो प्रतिनिधि गलत तरीके से बने पृष्ठों के साथ वास्तविक पुस्तकालय का परीक्षण करें।
कोडिंग और सामग्री प्रकार पार्सिंग को कैसे प्रभावित करते हैं?
पार्सर को प्रतिक्रिया बाइट्स को वर्णों में परिवर्तित करने के लिए सही वर्ण कोडिंग की आवश्यकता है। एक गलत कोडिंग नामों, कीमतों, विराम चिह्न, और चयनकर्ता-संबंधित विशेषताओं के मूल्य को पेड़ निर्माण से पहले भ्रष्ट कर सकती है। विश्वसनीय प्रतिक्रिया मेटाडेटा और पार्सर के दस्तावेजित कोडिंग-डिटेक्शन व्यवहार का सम्मान करें।
सामग्री प्रकार भी महत्वपूर्ण है। HTML और XML के पास विभिन्न पार्सिंग नियम और त्रुटि व्यवहार हैं। XML सामान्यत: उचित इनपुट और नामस्थान-सजग प्रसंस्करण की आवश्यकता होती है, जबकि HTML सामान्य मार्कअप त्रुटियों के लिए पुनर्प्राप्ति व्यवहार को परिभाषित करता है। टेक्स्ट/HTML को XML पार्सर में देना एक पृष्ठ को अस्वीकार कर सकता है जो ब्राउज़र प्रदर्शित करते हैं, जबकि XML को HTML पार्सर में देना नामस्थान या केस से संबंध खो सकता है।
अंतिम प्रतिक्रिया सामग्री प्रकार और URL को कैद के साथ रिकॉर्ड करें। एक सामान्य पृष्ठ URL JSON, एक डाउनलोड, एक एक्सेस पृष्ठ, या अनुरोध संदर्भ के आधार पर अन्य प्रारूप को वापस कर सकता है। सेवा द्वारा वास्तव में क्या लौटाया गया है, यह जांचने के बाद ही पार्सर का चयन करें।
स्क्रिप्ट पार्सर के साथ कैसे इंटरैक्ट करती हैं?
ब्राउज़र में, कुछ स्क्रिप्ट तत्व HTML पार्सिंग को रोक सकते हैं जबकि कोड को लोड और निष्पादित किया जाता है। उस कोड से आंशिक रूप से बनाए गए DOM की जांच की जा सकती है, अतिरिक्त मार्कअप लिखा जा सकता है, या बाद में परिवर्तनों के लिए कार्यक्रमित किया जा सकता है। अन्य स्क्रिप्ट बिना रोकने के उसी तरह लोड होती हैं और प्रारंभिक पार्सिंग के पूरा होने के बाद पृष्ठ को अपडेट कर सकती हैं।
एक साधारण पार्सर सिर्फ प्रारंभिक पेड़ का निर्माण करके अनुप्रयोग जीवनचक्र को पुन: उत्पन्न नहीं करता है। यदि ज़रूरी डेटा स्क्रिप्ट द्वारा डाले जाते हैं, तो निष्कर्षण कार्यप्रवाह को एक ब्राउज़र या एक संरचित प्रतिक्रिया की आवश्यकता होती है जो समान जानकारी शामिल करती है। सही इनपुट रेंडर की गई DOM हो सकती है, लेकिन यह रेंडरिंग के दौरान देखी गई API प्रतिक्रिया भी हो सकती है।
लक्षित सामग्री से संबंधित एक पूर्णता स्थिति चुनें। दस्तावेज़ लोड अकेले तभी हो सकता है जब ग्राहक अनुप्रयोग अपने डेटा अनुरोध को पूरा करने से पहले, जबकि निरंतर विश्लेषण ट्रैफ़िक नेटवर्क-आलसी स्थितियों को अनुपयुक्त बना सकता है। आवश्यक मॉड्यूल से संबंधित एक तत्व, प्रतिक्रिया, या आवेदन की स्थिति अधिक अर्थपूर्ण होती है।
आप निष्कर्षण के लिए HTML पार्सर का परीक्षण कैसे करते हैं?
पार्सर परीक्षणों में वैध मार्कअप, छोड़े गए टैग, अमान्य नेस्टिंग, एंटिटीज़, टिप्पणियाँ, तालिकाएँ, स्क्रिप्ट, गैर-ASCII पाठ, और खाली दस्तावेज़ शामिल होने चाहिए। परिणामस्वरूप पेड़ की तुलना निकालने के नियमों द्वारा आवश्यक व्यवहार के साथ करें, न कि केवल यह परीक्षण करें कि पार्सिंग बिना कोई अपवाद लौटती है।
निकासी परीक्षणों को पार्स की गई ट्री पर काम करना चाहिए और रिकॉर्ड की सीमाओं, फ़ील्ड टेक्स्ट, एट्रिब्यूट्स और वैकल्पिक मॉड्यूल्स को सत्यापित करना चाहिए। उन पृष्ठों को शामिल करें जिनका स्रोत और DOM भिन्न हैं ताकि टीम जान सके कि क्या कोई नियम सर्वर HTML या रेंडर किया हुआ HTML अपेक्षाएँ करता है।
जब एक पार्सर या पुस्तकालय संस्करण बदलता है, तो प्रतिनिधि कॉर्पस को पुनः चलाएँ। ट्री सुधार, टेक्स्ट सामान्यीकरण, या चयनकर्ता समर्थन में एक छोटी भिन्नता निकाले गए रिकॉर्ड को बदल सकती है। पार्स और निकासी स्टैक को स्कीमा के साथ एक साथ संस्करण करें ताकि परिवर्तन के स्रोत का पता लगाया जा सके।
निष्कर्ष
HTML पार्सिंग मार्कअप को DOM में परिवर्तित करता है जिसे ब्राउज़र्स और निकासी उपकरण क्वेरी कर सकते हैं। विश्वसनीय निकासी सही इनपुट—स्रोत HTML या रेंडर किया हुआ HTML—चुनने से शुरू होती है—फिर परिणामस्वरूप ट्री पर संरचनात्मक चयनकर्ताओं और स्कीमा मान्यता का उपयोग करें।
क्या आप अपने वेब डेटा वर्कफ़्लो का निर्माण करने के लिए तैयार हैं?
सार्वजनिक वेब सामग्री को पुनः प्राप्त करने के लिए Scrapeless का उपयोग करें, फिर उस खोज और निकासी पैटर्न को लागू करें जो आपके डेटा सेट के अनुकूल हो।
फ्री शुरू करें →FAQ
क्या HTML पार्सिंग वेब स्क्रैपिंग के समान है?
नहीं। HTML पार्सिंग एक दस्तावेज़ ट्री का निर्माण करता है; वेब स्क्रैपिंग में पुनर्प्राप्ति, चयन, सफाई, मान्यता और भंडारण भी शामिल है।
क्या एक HTML पार्सर JavaScript चलाता है?
एक स्वतंत्र HTML पार्सर सामान्यतः JavaScript निष्पादित नहीं करता है। एक ब्राउज़र रनटाइम स्क्रिप्ट निष्पादित कर सकता है और परिणामी DOM को उजागर कर सकता है।
DOM पृष्ठ स्रोत से भिन्न क्यों हो सकता है?
HTML पार्सर मार्कअप को सुधार सकता है और तत्वों को व्यक्त कर सकता है, जबकि JavaScript पार्सिंग के बाद नोड्स को जोड़, हटा या बदल सकता है।
क्या HTML पार्सिंग के बिना CSS चयनकर्ताओं का उपयोग किया जा सकता है?
CSS चयनकर्ता एक दस्तावेज़ ट्री पर काम करते हैं, इसलिए मार्कअप पहले पार्स किया जाना चाहिए या एक ऐसे वातावरण के माध्यम से प्रदान किया जाना चाहिए जो पहले से ही DOM को उजागर करता है।