DOM क्या है? वेब डेटा कार्य के लिए एक व्याव práctica guía
Scrapeless Scraping Browser पृष्ठों को एक क्लाउड ब्राउज़र में चलाता है ताकि डेटा कार्यप्रवाह DOM को पृष्ठ के लोड और परिवर्तन के बाद निरीक्षण कर सकें।
TL;DR
- Dom एक अदृश्य भाग का वर्णन करता है कि वेब पृष्ठ या वेब सिस्टम कैसे व्यवहार करते हैं। उपयोगी परिभाषा विचार को डेटा, स्थिति और अनुरोधों से जोड़ती है जो कार्यप्रवाह प्रमाणित कर सकता है।
- प्रतिक्रिया HTML और ब्राउज़र स्थिति को आपस में नहीं बदला जा सकता। कुछ मान तुरंत उपलब्ध होते हैं, जबकि अन्य को रेंडरिंग, इंटरएक्शन या बाद की संरचित प्रतिक्रिया की आवश्यकता होती है।
- पूर्ण डेटा लौटाने का सबसे हल्का तरीका चुनें। जब HTML पर्याप्त हो, तो उसे पार्स करें, जब उपयुक्त हो तो संरचित अनुरोधों का निरीक्षण करें, और जब ब्राउज़र निष्पादन आवश्यक हो तो एक ब्राउज़र का उपयोग करें।
- पूर्णता को सामग्री साक्ष्य के साथ साबित करना आवश्यक है। स्थिर पहचानकर्ता, स्पष्ट अंत राज्य, और स्रोत-विशिष्ट तैयारता स्थितियाँ निश्चित विलंबों से अधिक सुरक्षित हैं।
- जिम्मेदार संग्रह प्रकाशित पहुँच नियमों और क्षमता का सम्मान करता है। सार्वजनिक दृश्यता शर्तों, कानूनी दायित्वों, रोबोट निर्देशों, या दर नियंत्रणों को हटा नहीं देती।
DOM क्या है?
दस्तावेज़ वस्तु मॉडल, जिसे आमतौर पर DOM में संक्षिप्त किया जाता है, ब्रोउज़र के मेमोरी में एक दस्तावेज़ का वस्तु वृक्ष के रूप में प्रतिनिधित्व है। HTML स्रोत मार्कअप प्रदान करता है, जबकि ब्राउज़र उस मार्कअप को पार्स करता है और दस्तावेज़, तत्व, पाठ, टिप्पणियाँ, और अन्य दस्तावेज़ भागों के लिए नोड्स बनाता है। प्रोग्राम फिर मानक ब्राउज़र API के माध्यम से उन नोड्स को पढ़ या बदल सकते हैं।
DOM वही नहीं है जो सर्वर द्वारा लौटाए गए HTML फ़ाइल है। प्रतिक्रिया शरीर इनपुट है। DOM वह पार्स किया हुआ, जीवित परिणाम है जो ब्राउज़िंग संदर्भ के भीतर होता है। एक ब्राउज़र गलत फ़ॉर्मेटेड नेस्टिंग को सही कर सकता है, इम्प्लाइड तत्व जोड़ सकता है, टेम्पलेट्स को विस्तारित कर सकता है, शैडो पेड़ जोड़ सकता है, या JavaScript को मूल प्रतिक्रिया के आने के बाद नोड्स बनाने और हटाने की अनुमति देता है। इसी कारण View Source और Elements पैनल विभिन्न संरचनाएँ दिखा सकते हैं।
एक DOM वृक्ष संबंधों को रिकॉर्ड करता है। दस्तावेज़ में एक HTML तत्व होता है; वह तत्व सिर और शरीर की शाखाएँ रखता है; उन शाखाओं के भीतर वंशज जैसे शीर्षक, लिंक, फ़ॉर्म, तालिकाएँ, और पाठ नोड होते हैं। माता-पिता, बच्चे, भाई, और वंशज संबंध CSS चयनकर्ताओं, XPath अभिव्यक्तियों, पहुँच उपकरणों, परीक्षणों, और स्क्रेपिंग कोड को सामग्री का पता लगाने के लिए साझा करते हैं।
प्रमुख विभाजन व्याव prakty है: एक डेटा कार्यप्रवाह को लक्ष्य मान का स्वामित्व करने वाली परत को पहचानना चाहिए। वह परत दस्तावेज़ प्रतिक्रिया, ब्राउज़र मेमोरी, एक तैयार नोड, एक पृष्ठभूमि प्रतिक्रिया, या सर्वर-साइड नीति हो सकती है। एक बार परत ज्ञात हो जाने पर, कार्यप्रवाह कम पूर्वधारणाओं के साथ मान को एकत्र कर सकता है और इसे उन पृष्ठ व्यवहारों के खिलाफ मान्यता दे सकता है जो उपयोगकर्ता वास्तव में प्राप्त करते हैं।
DOM कैसे काम करता है
जब प्रक्रिया को दृश्यात्मक चरणों में विभाजित किया जाता है, तो DOM के बारे में सोचना आसान हो जाता है। प्रत्येक चरण ऐसे सबूत बनाता है जिन्हें प्रतिक्रिया, ब्राउज़र, नेटवर्क लॉग, या निकाली गई रिकॉर्ड सेट में चेक किया जा सकता है।
पार्सिंग वृक्ष शुरू करता है
ब्राउज़र बाइट्स पढ़ता है, उन्हें पाठ के रूप में डिकोड करता है, मार्कअप को टोकनाइज़ करता है, और दस्तावेज़ नोड्स का निर्माण करता है। पार्सिंग तब भी जारी रह सकता है जब अन्य संसाधनों को खोजा जाता है। परिणामी वृक्ष लेखक के अनुक्रमण से भिन्न हो सकता है क्योंकि HTML पार्सिंग निर्धारित त्रुटि-रिकवरी नियमों का पालन करता है।
CSS प्रस्तुति को प्रभावित करता है
CSS नियम DOM तत्वों के खिलाफ मिलते हैं और प्रस्तुत पृष्ठ में योगदान करते हैं, लेकिन CSS DOM को प्रतिस्थापित नहीं करती। एक तत्व DOM में हो सकता है जबकि दृश्य रूप से छिपा हुआ, स्थानांतरित, क्लिप किया हुआ, या पुनः स्टाइल किया गया। डेटा निष्कर्षण को यह तय करना चाहिए कि इसे अस्तित्व, दृश्यता, या प्रदर्शित पाठ की आवश्यकता है।
JavaScript नोड्स को म्यूटेट करता है
ब्राउज़र JavaScript नोड्स का चयन कर सकता है, विशेषताएँ या पाठ बदल सकता है, नए शाखाएँ डाल सकता है, तत्वों को हटा सकता है, और घटक श्रोता जोड़ सकता है। एक उत्पाद सूची जो API प्रतिक्रिया के बाद प्रकट होती है, अक्सर उन नोड्स द्वारा दर्शाई जाती है जो प्रारंभिक HTML पार्स के बाद बनाए गए थे।
घटनाएँ राज्य परिवर्तनों को उजागर करती हैं
क्लिक्स, इनपुट, नेविगेशन, नेटवर्क पूर्णता, और कस्टम एप्लिकेशन घटनाएँ DOM अपडेट्स को लीड कर सकती हैं। एक स्वचालन कार्यप्रवाह अक्सर एक महत्वपूर्ण चयनकर्ता या स्थिति की शर्त का इंतजार करता है, बजाय इसके कि पहले लोड घटना को यह प्रमाण के रूप में माना जाए कि लक्षित सामग्री तैयार है।
DOM स्नैपशॉट समय-विशिष्ट हैं
DOM कैप्चर एक पृष्ठ की स्थिति को एक क्षण पर वर्णन करता है। व्यक्तिगतकरण, स्थान, दृश्यपटल, सत्र की स्थिति, और असिंक्रोनस अनुरोध इस बात को बदल सकते हैं कि वृक्ष में क्या है। पुनरुत्पादक निकासी उन स्थितियों को रिकॉर्ड करती है जो स्नैपशॉट को उत्पन्न करती हैं।
ये चरण ओवरलैप कर सकते हैं, दोहराए जा सकते हैं, या विभिन्न प्रणालियों द्वारा संभाले जा सकते हैं। इसलिए निकासी योजना को वास्तविक अनुरोध और स्थिति क्रम का पालन करना चाहिए न कि यह मानना कि एक पृष्ठ-लोड घटना सम्पूर्ण जीवन चक्र का प्रतिनिधित्व करती है। ब्राउज़र डेवलपर उपकरण उपयोगी होते हैं क्योंकि वे दस्तावेज़, नेटवर्क, संग्रहण, और रनटाइम दृश्यों को एक दूसरे के बगल में रखते हैं।
मुख्य फ़ॉर्म और संबंधित अवधारणाएँ
इन्हीं भेदों की व्युत्पत्ति आम श्रेणी की त्रुटियों को रोकती है। वे टीमों को/parser, HTTP क्लाइंट, ब्राउज़र, शेड्यूलर, या क्रॉल नीति चुनने में भी मदद करती हैं।
| अवधारणा | यह क्या दर्शाता है | सामान्य उपयोग |
|---|---|---|
| HTML स्रोत | सीरियलाइज किए गए मार्कअप को लौटाया या संग्रहीत किया गया | सर्वर-रेंडर्ड कंटेंट और संसाधन खोज के लिए उपयोगी |
| DOM | ब्राउज़र द्वारा निर्मित जीवित वस्तु वृक्ष | चयनकर्ताओं, इंटरएक्शन, और पोस्ट-रेंडर निष्कर्षण के लिए उपयोगी |
| CSSOM | शैलीपत्रों का पार्स किया गया प्रतिनिधित्व | ब्राउज़र को यह समझने में मदद करता है कि नोड्स को कैसे देखना चाहिए |
| एक्सेसिबिलिटी ट्री | उपयोगकर्ता-एजेंट के दृश्य में आसानी से उपलब्ध भूमिकाएँ और नाम | सहायक प्रौद्योगिकी और भूमिका-आधारित स्वचालन के लिए उपयोगी |
एक लेबल तब ही उपयोगी होता है जब यह व्यवहार की भविष्यवाणी करता है। यदि एक ही साइट पर दो मार्ग अलग-अलग परतों के माध्यम से डेटा लौटाते हैं, तो उन्हें एक तरह की वास्तुकला शब्द में वर्णित होने पर भी अलग निकासी सतहों के रूप में मानें। मार्ग-स्तरीय अवलोकन एक डोमेन-व्यापी धारणा को हरा देता है।
यह वेब स्क्रैपिंग और डेटा संग्रहण के लिए क्यों महत्वपूर्ण है
जब यह गलत परत पढ़ता है तब वेब संग्रह चुपचाप असफल हो जाता है। एक पार्सर वैध HTML लौटा सकता है जिसमें लक्षित रिकॉर्ड का अभाव होता है। एक ब्राउज़र एक विश्वासप्रद धात्री को प्रस्तुत कर सकता है जबकि एक आवश्यक अनुरोध अस्वीकृत होता है। एक अनुक्रम पूर्ण बैच लौटा सकता है जबकि समान रिकॉर्ड को दोहराते हैं। नीचे दिए गए जांच डोम को डेटा गुणवत्ता से जोड़ते हैं, न कि उपकरण की प्राथमिकता से।
चयनकर्ता-आधारित निकासी
एक स्क्रैपर स्थिर विशेषताओं,.semantic तत्वों, या डोम में मजबूत यूआरएल पैटर्न को क्वेरी कर सकता है। निर्माण प्रणाली द्वारा उत्पन्न वर्ग नाम आमतौर पर स्पष्ट लेबलों या डेटा विशेषताओं की तुलना में कम भरोसेमंद होते हैं।
इंटरैक्शन-गेटेड सामग्री
टैब, डायलॉग, फ़िल्टर और विस्तारणीय पैनल तब तक अपने उपयोगी नोड्स का उत्पादन नहीं कर सकते जब तक एक क्रिया नहीं होती। ब्राउज़र ऑटोमेशन क्रिया करता है और फिर परिणामी ट्री का निरीक्षण करता है।
रेंडर की गई लिंक खोज
एकल-पृष्ठ एप्लीकेशन नेविगेशन या डेटा लोडिंग के बाद एंकर जोड़ सकते हैं। रेंडर की गई डोम पढ़ने से लिंक प्रकट होते हैं जो एक साधारण प्रतिक्रिया पार्सर कभी प्राप्त नहीं करता।
गुणवत्ता जांच
गणनाएँ, आवश्यक क्षेत्र, डुप्लिकेट कुंजियाँ, और खाली-राज्य संदेशों को रिकॉर्ड स्वीकार करने से पहले सीधे डोम के खिलाफ मूल्यांकन किया जा सकता है।
एक ब्राउज़र उस निर्णय पेड़ के अंदर एक विकल्प है। स्क्रैपलेस स्क्रैपिंग ब्राउज़र उत्पाद पृष्ठ प्रबंधित ब्राउज़र सतह का वर्णन करता है, जबकि स्क्रैपिंग ब्राउज़र आरंभिक दस्तावेज़ीकरण कनेक्शन और सत्र मापदंडों को कवर करता है। केवल उन राज्यों के लिए ब्राउज़र रेंडरिंग का उपयोग करें जिन्हें ब्राउज़र निष्पादन की आवश्यकता होती है, और पहले से उपलब्ध सामग्री के लिए सरल फेच-एंड-पार्स पथ रखें।
एक व्यावहारिक निदान कार्यप्रवाह
एक विश्वसनीय निदान की शुरुआत तुलना से होती है, न कि स्वचालन कोड से। पहले उत्तर को बनाए रखें, लाइव इंटरफ़ेस का अवलोकन करें, और प्रत्येक लक्षित क्षेत्र को उस घटना या संसाधन से कनेक्ट करें जो इसे बनाता है।
- नेटवर्क प्रतिक्रिया शरीर की तुलना करें। यदि लक्षित पाठ दोनों में प्रकट होता है, तो एक हल्का HTML पार्सर पर्याप्त हो सकता है; यदि यह केवल तत्वों में प्रकट होता है, तो रेंडरिंग या सीधा API पहुंच आवश्यक है।
- लक्षित रिकॉर्ड्स का मालिक सबसे छोटा स्थिर कंटेनर पहचानें। लेआउट-उन्मुख श्रेणियों पर निर्भर करने से पहले सेमांटिक तत्व, उपलब्ध नाम, स्थिर विशेषताएँ, या लिंक पैटर्न से शुरू करें।
- जब सामग्री दिखाई देती है तो नेटवर्क पैनल को देखें। एक संरचित JSON प्रतिक्रिया कभी-कभी सैकड़ों प्रेजेंटेशन नोड्स को चलाने से एक साफ़ स्रोत प्रदान कर सकती है।
- एक स्पष्ट तत्परता की स्थिति परिभाषित करें, जैसे कि एक परिणाम कार्ड की उपस्थिति और एक लोडिंग संकेतक का गायब होना। एक सामान्य पृष्ठ-लोड इवेंट उस समय फायर हो सकता है जब एप्लिकेशन डेटा पेड़ तक पहुंचता है।
- खाली, आंशिक और वैकल्पिक राज्यों का परीक्षण करें। एक चयनकर्ता जो केवल तब काम करता है जब प्रत्येक क्षेत्र मौजूद हो, मौन खामियों का उत्पादन करेगा जब वैकल्पिक मूल्य, बैज, या विवरण छोड दिए जाते हैं।
परिणाम को एक छोटे निकासी अनुबंध के रूप में दस्तावेज़ करें: लक्षित यूआरएल पैटर्न, सार्वजनिक संदर्भ, स्रोत परत, तत्परता की स्थिति, चयनकर्ता या प्रतिक्रिया क्षेत्र, अद्वितीय कुंजी, निरंतरता नियम, अंत नियम, और मान्यता जांच। यह अनुबंध उनमें नाम दिए बिना समान धारणा वाले स्क्रिप्ट की तुलना में अधिक टिकाऊ है।
अनुबंध को परिभाषित करते समय प्राथमिक तकनीकी दस्तावेज़ीकरण के सबूत का उपयोग करें। इस विषय के लिए प्रासंगिक नींव में शामिल हैं MDN DOM स्क्रिप्टिंग परिचय WHATWG DOM मानक।वे स्रोत प्लेटफ़ॉर्म और प्रोटोकॉल व्यवहार का वर्णन करते हैं; लक्षित साइट का लाइव व्यवहार अभी भी अपने स्वयं के अवलोकन की आवश्यकता होती है।
सामान्य गलतियाँ
डोम के चारों ओर अधिकांश असफलताएँ एक सुविधाजनक संकेत को वास्तविक स्थिति के लिए प्रतिस्थापित करने से आती हैं, जिसकी कार्यप्रणाली को आवश्यकता होती है। निम्नलिखित गलतियाँ संभावित आउटपुट वापस कर सकती हैं, जो उन्हें एक स्पष्ट त्रुटि की तुलना में अधिक खतरनाक बनाती हैं।
- पृष्ठ स्रोत को अंतिम डोम के रूप में मानना क्लाइंट-निर्मित नोड्स को चूक जाता है और ब्राउज़र-सुधारे गए मार्कअप को गलत पढ़ सकता है।
- हर टेक्स्ट नोड का निष्कर्ष निकालना अक्सर नेविगेशन, छिपे हुए लेबल, कुकी सूचनाएं, और पुनरावृत्त मोबाइल या डेस्कटॉप रूपांतरों को कैप्चर करता है।
- गहरी स्थिति चयनकर्ता पर निर्भर होना कार्यप्रणाली को हानिरहित रैपर और लेआउट परिवर्तनों के प्रति संवेदनशील बनाता है।
- बहुत जल्दी पढ़ना संरचनात्मक रूप से मान्य लेकिन अधूरा स्नैपशॉट देता है, खासकर जब सूची तत्व बैच में आते हैं।
- मान लेना कि डोम में मानक डेटा होता है, गलत हो सकता है जब मान प्रारूपित, ट्रंकेट, आभासी, या केवल एप्लिकेशन स्थिति में रखे जाते हैं।
इन असफलताओं के खिलाफ सामग्री-स्तरीय प्रमाणीकरण के साथ सुरक्षा करें। एक ज्ञात कंटेनर की आवश्यकता है, परिणामों की अपेक्षा करते समय कम से कम एक स्थिर कुंजी, एक बैच के अंदर कोई डुप्लिकेट कुंजी नहीं, जहां क्रम महत्वपूर्ण है वहां संगत क्रम, और एक मान्यता प्राप्त खाली या अंत राज्य। संदिग्ध परिणाम को फिर से बनाने के लिए पर्याप्त संदर्भ संग्रहीत करें बिना क्रेडेंशियल्स या निजी डेटा रिकॉर्ड किए।
एक बनाए रखने योग्य कार्यप्रवाह के लिए सर्वश्रेष्ठ प्रथाएँ
दृश्य स्थिति की तुलना में स्थिर अर्थ को प्राथमिकता दें। चयनकर्ता और नियमों को एक मान के भूमिका का वर्णन करना चाहिए, न कि एक लेआउट में इसके अस्थाई स्थान का। जब एक संरचित प्रतिक्रिया प्राधिकृत सार्वजनिक स्रोत है जिसका उपयोग पृष्ठ द्वारा किया जाता है, तो प्रासंगिक फ़ील्ड मैपिंग को बनाए रखें और इसे रेंडर किए गए लेबल के खिलाफ वैधीकरण करें।
स्थिति को स्पष्ट बनाएं। क्षेत्र, दृश्यपटल, मार्ग, सार्वजनिक सत्र धारणा, फ़िल्टर, क्रम, और निरंतरता मानों को रिकॉर्ड करें। एक मान बिना इसकी स्थिति के बाद में एक कैप्चर के साथ तुलना करना असंभव हो सकता है।
खोज, निष्कर्ष, रेंडरिंग और निकासी को अलग करें। प्रत्येक चरण की अलग-अलग लागत और असफलता मोड होते हैं। अलगाव के माध्यम से एक नौकरी को केवल उन यूआरएल को रेंडर करने की अनुमति मिलती है जिन्हें इसकी आवश्यकता है, बिना नए ट्रैफ़िक के संग्रहित प्रतिक्रियाओं को फिर से संसाधित करना, और रिकॉर्डों का निरीक्षण करना जो डाउनस्ट्रीम प्रणालियों में प्रवेश करने से पहले अधूरे होते हैं।
सीमित कार्य का उपयोग करें। प्रत्येक रन के लिए अधिकतम पृष्ठ, स्क्रॉल क्रियाएँ, सक्रिय अनुरोध और रिकॉर्ड परिभाषित करें। सीमाएँ लक्ष्य सेवा और संग्रह प्रणाली की रक्षा करती हैं जब अगला नियंत्रण लूप, एक कर्सर दोहराता है, या एक पृष्ठ अप्रत्याशित क्रॉल स्थान बनाता है।
प्रकाशक और उपयोगकर्ता का सम्मान करें। जहां लागू हो वहां robots.txt की जांच करें, नियमों और कानूनों का पालन करें, केवल एक निर्दिष्ट उद्देश्य के लिए आवश्यक सार्वजनिक फ़ील्ड इकट्ठा करें, निजी या प्रतिबंधित क्षेत्रों से बचें, और अनुरोध की मात्रा एक संवेदनशील सीमा के भीतर रखें। तकनीकी पहुंच हर उपयोग के लिए प्राधिकरण के समान नहीं है।
निष्कर्ष
Dom एक परिचालन मॉडल के रूप में सबसे उपयोगी है: पहचानें कि डेटा कहां मौजूद है, देखें कि वह स्थिति कैसे उत्पन्न होती है, और उस छोटे से संग्रह विधि का चयन करें जो इसे पुन: उत्पन्न कर सके। सबसे मजबूत कार्यप्रवाह स्रोत और प्रस्तुत राज्यों की तुलना करता है, स्पष्ट निरंतरता संकेतों का पालन करता है, और रिकॉर्ड को स्थायी कुंजियों के साथ मान्य करता है।
एक प्रतिनिधि URL से शुरू करें और स्केल करने से पहले निष्कर्षण अनुबंध लिखें। यह छोटा कदम छिपी हुई समय, रूटिंग, पृष्ठांकन और नीति धारणाओं को उजागर करता है जब वे अभी भी ठीक करने के लिए सस्ते होते हैं। कार्यप्रवाह को केवल तब बढ़ाएं जब यह समझा सके कि प्रत्येक रिकॉर्ड पूरा क्यों है और प्रत्येक फ़ील्ड कहां से आई है।
क्या आप जावास्क्रिप्ट-संचालित पृष्ठों का निरीक्षण करने के लिए तैयार हैं?
जब एक सार्वजनिक पृष्ठ को ब्राउज़र निष्पादन, इंटरैक्शन, या प्रस्तुत-राज्य निरीक्षण की आवश्यकता होती है तो Scrapeless Scraping Browser का उपयोग करें।
मुफ्त शुरू करें →अक्सर पूछे जाने वाले प्रश्न
क्या DOM HTML के समान है?
नहीं। HTML स्रोत मार्कअप है, जबकि DOM एक सक्रिय वस्तु वृक्ष है जिसे एक ब्राउज़र उस मार्कअप से बनाता है। जावास्क्रिप्ट और ब्राउज़र पार्सिंग नियम DOM को मूल प्रतिक्रिया से भिन्न बना सकते हैं।
क्या एक स्क्रैपर बिना ब्राउज़र विंडो दिखाए DOM पढ़ सकता है?
हाँ। एक हेडलेस या क्लाउड ब्राउज़र बिना दृश्यमान डेस्कटॉप विंडो के DOM को बना सकता है और उजागर कर सकता है। यदि इसकी सामग्री ब्राउज़र जावास्क्रिप्ट पर निर्भर करती है तो पृष्ठ को अभी भी एक ब्राउज़र इंजन की आवश्यकता होती है।
क्यों एक चयनकर्ता DevTools में काम करता है लेकिन एक साधारण HTTP स्क्रैपर में विफल रहता है?
चयनकर्ता उन नोड्स को लक्षित कर सकता है जो जावास्क्रिप्ट चलने के बाद बनाए जाते हैं। एक साधारण HTTP स्क्रैपर केवल प्रतिक्रिया शरीर को देखता है और उन नोड्स को बनाने वाले कोड को निष्पादित नहीं करता है।
क्या एक DOM चयनकर्ता को स्थिर बनाता है?
एक स्थिर चयनकर्ता अस्थायी लेआउट के बजाय अर्थ या स्थायी पहचानकर्ता को दर्शाता है। सेमांटिक टैग, प्रलेखित विशेषताएँ, सुलभ लेबल, और सुसंगत URL आकृतियाँ आमतौर पर डिजाइन में बदलावों को उत्पन्न वर्ग नामों की तुलना में बेहतर ढंग से सहन करती हैं।