जावास्क्रिप्ट के साथ वेब स्क्रैपिंग: फ़ेच, चयन, मान्यकरण

जावास्क्रिप्ट के साथ वेब स्क्रैपिंग

Scrapeless ए Agent ब्राउज़र उस समय जावास्क्रिप्ट स्वचालन के लिए एक क्लाउड ब्राउज़र कनेक्शन प्रदान करता है जब एक सार्वजनिक पृष्ठ को रेंडर्ड स्थिति या इंटरक्शन की आवश्यकता होती है।

TL;DR

  • जावास्क्रिप्ट स्क्रैपिंग के दो अधिग्रहण पाथ हैं। जब फ़ील्ड मौजूद होते हैं, तो प्रतिक्रिया HTML फ़ेच और पार्स करें; जब पृष्ठ कोड उन्हें बाद में बनाता है, तो रेंडर करें।
  • Node.js फ़ेच प्रतिक्रिया प्राप्त करता है लेकिन एक पृष्ठ को रेंडर नहीं करता। एक पार्सर या ब्राउज़र एक अलग घटक है।
  • चयनकर्ताओं को एक रिकॉर्ड तक सीमित होना चाहिए। स्थिर विशेषताएँ और साम्प्रदायिक संबंध उत्पन्न किए गए वर्ग श्रृंखलाओं की तुलना में बनाए रखना आसान होते हैं।
  • पृष्ठांकन और मान्यता को स्पष्ट रोक नियमों की आवश्यकता होती है। अद्वितीय कुंजियाँ, अगले लिंक और स्वीकृत रिकॉर्ड को ट्रैक करें।

जावास्क्रिप्ट के साथ वेब स्क्रैपिंग का मतलब है एक अनुमत वेब प्रतिनिधित्व को पुनः प्राप्त करना और चयनित फ़ील्ड को रिकॉर्ड में बदलना। Node.js में, फ़ेच HTML डाउनलोड कर सकता है और एक पार्सर उसका क्वेरी कर सकता है। एक ब्राउज़र संदर्भ में, पृष्ठ स्क्रिप्ट निष्पादित हो सकते हैं और स्वचालन परिणामी DOM को पढ़ सकता है। उन पाथ में वही भाषा होती है लेकिन उनके पास अलग-अलग क्षमताएँ, लागतें और विफलता संकेत होते हैं।

एक एकल सार्वजनिक पृष्ठ और एक छोटे स्कीमा के साथ शुरू करें। एक रिकॉर्ड कंटेनर, एक आवश्यक फ़ील्ड, एक वैकल्पिक फ़ील्ड, और एक स्थिर पहचानकर्ता पहचानें। प्रारंभिक प्रतिक्रिया की तुलना दृश्य पृष्ठ से करें। फिर उन फ़ील्ड को वास्तव में शामिल करने वाले अधिग्रहण पथ का चयन करें। ट्यूटोरियल का शेष हिस्सा चयन, पृष्ठांकन, और आउटपुट को ईमानदार बनाए रखने पर केंद्रित है जब स्रोत बदलता है।

चयनकर्ताओं को लिखने से पहले पृष्ठ को वर्गीकृत करें

ब्राउज़र डेवलपर उपकरणों का उपयोग करें ताकि पहले दस्तावेज़ प्रतिक्रिया की जांच करें और एक लक्षित मान खोजें। यदि मान कच्चे HTML में प्रकट होता है, तो Node.js फ़ेच एक HTML पार्सर के साथ काम कर सकता है। यदि यह केवल स्क्रिप्ट चलाने के बाद प्रकट होता है, तो किसी भी अनुमति प्राप्त संरचित नेटवर्क प्रतिक्रिया और परिणामस्वरूप DOM की जांच करें। एक ऐसा पृष्ठ जिसमें जावास्क्रिप्ट फ़ाइलें हैं, स्वचालित रूप से एक क्लाइंट-निर्मित डेटा स्रोत नहीं है; प्रासंगिक प्रश्न यह है कि विशिष्ट फ़ील्ड कब उपलब्ध होती है।

यह Node.js वैश्विक फ़ेच दस्तावेज़ीकरण एक HTTP अनुरोध इंटरफ़ेस का वर्णन करता है। एक समाप्त फ़ेच कॉल आपको एक प्रतिक्रिया ऑब्जेक्ट देती है, न कि एक रेंडर किया गया ब्राउज़र दस्तावेज़। पाठ पढ़ने से पहले response.ok, अंतिम URL, और Content-Type की जाँच करें। एक एक्सेस सूचना या लॉगरिन पृष्ठ वैध HTML हो सकता है, इसलिए चयनकर्ताओं को चलाने से पहले लक्षित पृष्ठ से संबंधित एक मार्कर का परीक्षण करें।

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

DOM-उन्मुख पुस्तकालय के साथ स्थिर HTML पार्स करें

Cheerio जैसे पार्सर मार्कअप को एक क्वेरी करने योग्य संरचना में लोड करता है। इसका औपचारिक परिचय CSS-शैली के यात्रा का उल्लेख करता है जबकि यह स्पष्ट करता है कि Cheerio जावास्क्रिप्ट निष्पादित नहीं करता। पहले रिकॉर्ड कंटेनर का चयन करें, फिर हर कंटेनर के भीतर शीर्षक, लिंक और वैकल्पिक फ़ील्ड का चयन करें। यह संबंधों को बनाए रखता है भले ही एक रिकॉर्ड में एक फ़ील्ड गायब हो।

उदाहरण के लिए, एक सार्वजनिक सूची article[data-item-id] को कंटेनर के रूप में उपयोग कर सकती है। विशेषता से ID पढ़ें, उस लेख के भीतर एक h2 खोजें, और अंतिम प्रतिक्रिया URL के विरुद्ध इसके एंकर href को हल करें। टेक्स्ट को सामान्यीकृत करें और स्पेस को समेटें, लेकिन उनकी अर्थवत्ता कैद होने तक मुद्रा प्रतीकों या इकाइयों को न हटाएं। यदि कोई फ़ील्ड अनुपस्थित है, तो स्पष्ट null निकालें या स्कीमा के तहत रिकॉर्ड को अस्वीकार करें बजाय इसके कि किसी अन्य वस्तु का मान उसके स्थान पर शिफ्ट कर दिया जाए।

चयन लॉजिक के लिए विकास फिक्स्चर के रूप में वास्तविक अनुमत HTML का एक नमूना रखें। यह पार्सर परिवर्तनों को परीक्षण के लिए सस्ता बनाता है। हालांकि, केवल फिक्स्चर वर्तमान अधिग्रहण को मान्य नहीं करता है; पृष्ठ पहचान और फ़ील्ड गिनती के खिलाफ एक छोटा लाइव चेक चलाएं। HTTP विफलता से एक पार्सर विफलता को अलग करें दोनों चरणों की स्वतंत्रता से रिपोर्ट करके।

केवल आवश्यक होने पर रेंडर और इंटरएक्ट करें

जब लक्षित फ़ील्ड केवल ब्राउज़र कार्यान्वयन के बाद मौजूद होते हैं, तो एक ब्राउज़र स्वचालन सत्र नेविगेट कर सकता है, लक्षित फ़ील्ड के लिए प्रतीक्षा कर सकता है, और परिणामस्वरूप DOM को पढ़ सकता है। एक निश्चित देरी के बजाय सामग्री-स्पष्ट स्थानांतरक का उपयोग करें। Playwright स्थानांतरक मार्गदर्शन बताता है कि स्थानांतरक तत्वों की पहचान कैसे करती हैं और कार्रवाई योग्य स्थिति के लिए प्रतीक्षा का समर्थन करती हैं। एक स्थानांतरक को अभी भी पृष्ठ के वास्तविक मार्कअप में से चुना जाना चाहिए।

यह एजेंट ब्राउज़र आरंभ गाइड समर्थित स्वचालन ढाँचे के लिए एक क्लाउड ब्राउज़र कनेक्शन का दस्तावेजीकरण करता है। यह उपयोगी है जब एक कार्यप्रवाह को ब्राउज़र कार्यान्वयन या क्रियाओं के अनुक्रम की आवश्यकता होती है। यह माने कि ब्राउज़र से कनेक्ट होने से सही डेटा सेट की गारंटी होती है: एक पृष्ठ एक शेल, सहमति सूचना, या एक्सेस स्थिति को रेंडर कर सकता है। नेविगेशन के बाद मार्ग और लक्षित रिकॉर्ड का मान्यकरण करें।

यदि पृष्ठ स्क्रॉल पर अधिक रिकॉर्ड लोड करता है, तो वर्तमान अद्वितीय कुंजियों का सेट कैप्चर करें, एक सीमाबद्ध कार्रवाई करें, फिर नए कुंजी या स्पष्ट अंत संकेत के लिए प्रतीक्षा करें। जब प्रलेखित या अवलोकित निरंतरता समाप्त होती है, तो रोकें। निश्चित रूप से एक निश्चित संख्या को अंधाधुंध स्क्रॉल करना डेटा को चूक सकता है, डेटा को दोहराता है, या स्क्रिप्ट को निष्क्रिय रखता है जब उपयोगी संग्रह पूरा हो गया हो।

पृष्ठांकन और रिकॉर्ड आकार को संभालें

एक सत्यापित अगले लिंक, पृष्ठ पैरामीटर, या कर्सर का पालन करें केवल तभी जब यह स्रोत के वास्तविक नेविगेशन मॉडल से संबंधित हो। अंतिम पृष्ठ URL के विरुद्ध लिंक को हल करें और लक्षित दायरे के बाहर के गंतव्यों को अस्वीकार करें। एक दौरा किए गए पृष्ठ सेट और एक अलग रिकॉर्ड-कुंजी सेट रखें। पहला नेविगेशन लूप की रोकथाम करता है; दूसरा पृष्ठों के बीच दोहराए गए आइटम का पता लगाता है।

स्केल पर संग्रह करने से पहले आउटपुट परिभाषित करें। एक साधारण रिकॉर्ड में स्रोत URL, वस्तु ID, शीर्षक, गंतव्य URL, देखी गई कीमत का पाठ, और अवलोकन समय हो सकता है। आवश्यक क्षेत्रों की अनुपस्थिति में मान्यता में असफल होना चाहिए। वैकल्पिक क्षेत्रों को शून्य रहने देना चाहिए। जब किसी व्याख्या को बाद में संशोधित किया जा सकता है, तो कच्चे पाठ को सामान्यीकृत मूल्यों के साथ संग्रहित करें। एक पार्सर का सफलता संकेत डेटा गुणवत्ता संकेत नहीं है।

स्रोत परिवर्तनों को अवलोकनीय बनाएं। पृष्ठों की संख्या प्रस्तुत, चयनित रिकॉर्ड, स्वीकृत रिकॉर्ड, डुप्लिकेट कुंजी, गायब आवश्यक क्षेत्र, और अप्रत्याशित पृष्ठ पहचानियों की गणना करें। यदि एक स्रोत 200 स्थिति के साथ एक एक्सेस पृष्ठ लौटाना शुरू करता है, तो पहचान जांच को स्टोरेज रोकना चाहिए। यदि मार्कअप बदलता है लेकिन पृष्ठ सही रहता है, तो चयनकर्ता की कमी की गणना निष्कर्षण परत की ओर इंगित करेगी।

कार्यप्रवाह को जिम्मेदार और रखरखाव योग्य रखें

केवल उस सामग्री के साथ कार्य करें जिसे आपके प्रोजेक्ट को एक्सेस करने की अनुमति है। साइट शर्तें, गोपनीयता दायित्व, और क्षमता मार्गदर्शन की जांच करें; सहवर्ती और अनुरोध मात्रा को सीमित करें। क्लाइंट-साइड कोड में क्रेडेंशियल्स को एम्बेड न करें या उदाहरणों में सक्रिय सत्र कुकीज़ को प्रकाशित न करें। जब यह एक स्पष्ट अनुबंध के साथ समान अधिकृत डेटा प्रदान करता है, तो एक प्रलेखित API को प्राथमिकता दें।

यह एजेंट ब्राउज़र उत्पाद पृष्ठ प्रबंधित ब्राउज़र सतह का वर्णन करता है। संबंधित Node.js स्क्रापन गाइड हल्के HTML पार्सिंग की तुलना प्रदर्शित-पृष्ठ के काम से करता है। इन दोनों को एक निष्कर्षण अनुबंध के तहत दो अधिग्रहण विकल्प के रूप में मानें, न कि हर पृष्ठ को ब्राउज़र के माध्यम से चलाने का कारण।

एक आवर्ती स्क्रैप का कार्यक्रम बनाने से पहले, प्रत्येक लेआउट भिन्नता से एक प्रतिनिधि पृष्ठ का परीक्षण करें। संपादित प्रतिक्रिया साक्ष्य को सहेजें, क्षेत्र-स्तरीय निश्चितताएँ लिखें, और यह तय करें कि संग्रहित डेटा को कितने समय तक बनाए रखना चाहिए। एक छोटा, सही तरीके से निर्धारित कार्यप्रवाह एक व्यापक क्रॉलर की तुलना में ऑडिट करना आसान है जिसके विफलताएँ एक एकल कुल पंक्ति गणना के पीछे छिपी होती हैं।

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

निष्कर्ष

जावास्क्रिप्ट के साथ वेब स्क्रैपिंग तब काम करता है जब अधिग्रहण पथ स्रोत से मेल खाता है। पूर्ण प्रतिक्रिया HTML लाएं और पार्स करें; केवल ब्राउज़र-निर्मित स्थिति के लिए रेंडर करें। चयनकर्ताओं की दायरा निर्धारित करें, एक रिकॉर्ड स्कीमा को परिभाषित करें, वास्तविक निरंतरता नियम का पालन करें, और उन प्रतिक्रियाओं को अस्वीकार करें जो यह साबित नहीं करती हैं कि इच्छित पृष्ठ तक पहुँचा गया था।

जावास्क्रिप्ट स्क्रैपिंग कार्यप्रवाह बनाएं

एक अनुमत लक्ष्य चुनें और जब कच्चा HTML अधूरा हो तो उपयुक्त स्क्रैपलेस ब्राउज़र पथ से कनेक्ट करें।

आज ही साइन अप करें और पाएं $5 की निःशुल्क क्रेडिट — कोई क्रेडिट कार्ड आवश्यक नहीं.

अपना $5 क्रेडिट प्राप्त करें →

अक्सर पूछे जाने वाले प्रश्न

क्या जावास्क्रिप्ट बिना ब्राउज़र के स्क्रैप कर सकता है?

हाँ। Node.js HTML या एक अनुमत संरचित एंडपॉइंट लाने और लौटाई गई सामग्री को पार्स कर सकता है। एक ब्राउज़र की आवश्यकता केवल तब होती है जब लक्ष्य ब्राउज़र निष्पादन या इंटरैक्शन पर निर्भर करता है।

क्या फेच पृष्ठ जावास्क्रिप्ट को निष्पादित करता है?

नहीं। फेच एक HTTP प्रतिक्रिया लाता है। यह एक पृष्ठ DOM नहीं बनाता, डाउनलोड किए गए स्क्रिप्ट्स को चलाता नहीं है, या नियंत्रणों पर क्लिक नहीं करता। लौटाए गए HTML के लिए एक पार्सर का उपयोग करें या स्थिति के लिए एक ब्राउज़र वातावरण का उपयोग करें जो स्क्रिप्ट बनाते हैं।

Cheerio और ब्राउज़र के बीच क्या अंतर है?

Cheerio प्रदान किए गए मार्कअप को पार्स करता है और पृष्ठ स्क्रिप्ट के निष्पादन के बिना DOM-जैसे चयन का समर्थन करता है। एक ब्राउज़र स्क्रिप्ट्स को चलाता है, पृष्ठ स्थिति का प्रबंधन करता है, और नियंत्रणों के साथ बातचीत कर सकता है। चुनें कि लक्ष्य क्षेत्र कहां दिखते हैं इसके अनुसार।

एक स्क्रैपर को बदलती हुई CSS कक्षाओं को कैसे संभालना चाहिए?

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

क्या हर जावास्क्रिप्ट स्क्रैपर के लिए एक प्रॉक्सी आवश्यक है?

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

संदर्भ