What है lxml?
Scrapeless Scraping Browser गतिशील पृष्ठों के लिए क्लाउड ब्राउज़र निष्पादन प्रदान करता है जिनका निर्मित HTML Python पार्सर्स जैसे lxml के लिए इनपुट बन सकता है।
lxml एक Python पुस्तकालय है जो XML और HTML को संसाधित करने के लिए है। यह वृक्ष-आधारित पार्सिंग, दस्तावेज़ यात्रा, XPath प्रश्न, और XML रूपांतरण की क्षमताएँ प्रदान करता है जो ElementTree मॉडल के चारों ओर निर्मित इंटरफ़ेस के माध्यम से होते हैं। वेब स्क्रैपिंग में, lxml आमतौर पर एक अधिगृहीत दस्तावेज़ को क्षेत्रों में परिवर्तित करता है न कि पूरे क्रॉल को नियंत्रित करता है।
यह पुस्तकालय विशेष रूप से उपयोगी है जब संरचना उतनी ही महत्वपूर्ण होती है जितनी कि दृश्य पाठ। एक XML फ़ीड तत्वों को नाम क्षेत्रों के माध्यम से भेद कर सकता है। एक HTML विवरण एक वाक्य को कई नस्टेड टैगों में विभाजित कर सकता है। सही निष्कर्षण उस संरचना को समझने पर निर्भर करता है इससे पहले कि इसे एक स्प्रेडशीट या डेटाबेस पंक्ति में समतल किया जाए।
lxml के अंदर क्या है?
lxml XML और HTML प्रोसेसिंग के लिए Python इंटरफेस को libxml2 और libxslt द्वारा सपोर्ट करता है। etree इंटरफेस तत्व वृक्षों और XML-उन्मुख ऑपरेशनों को संभालता है, जबकि lxml.html HTML दस्तावेज़ों के लिए सुविधाएं जोड़ता है। ये सतहें ओवरलैप करती हैं, लेकिन उनकी पार्सिंग धारणाएँ और दस्तावेज़-विशिष्ट विधियाँ भिन्नता के लिए महत्वपूर्ण हैं।
यह lxml तत्व-वृक्ष मॉडल गुण, बच्चों और टेक्स्ट-संबंधित गुणों के साथ तत्वों का प्रतिनिधित्व करता है। आप सीधे उस वृक्ष को नेविगेट कर सकते हैं या उसके खिलाफ एक प्रश्न का मूल्यांकन कर सकते हैं। एक निष्कर्षण कार्यप्रणाली के लिए, विकल्प इस पर निर्भर करता है कि कौन सा व्यंजना स्रोत नोड और आउटपुट फ़ील्ड के बीच संबंध को बनाए रखना सबसे आसान बनाता है।
lxml दस्तावेज़ अनुक्रमण और रूपांतरणों का समर्थन करता है। ये क्षमताएं इसे फ़ीड रूपांतरण और नियंत्रित मार्कअप प्रोसेसिंग के लिए उपयोगी बनाती हैं, स्क्रैपिंग के अलावा। एक परियोजना को हर सतह का उपयोग करने की आवश्यकता नहीं होती: एक HTML संग्रहकर्ता एक छोटे सेट के पार्सिंग और चयन संचालन पर भरोसा कर सकता है जबकि रूपांतरण सुविधाओं का उपयोग नहीं करता है।
HTML पार्सिंग और XML पार्सिंग के पास विभिन्न अनुबंध होते हैं
HTML पार्सिंग को दोषपूर्ण HTML को समायोजित करने के लिए डिज़ाइन किया गया है, जबकि XML पार्सिंग सामान्यतः एक अच्छी तरह से निर्मित दस्तावेज़ की अपेक्षा करता है। पार्सर का चयन उस वृक्ष को बदलता है जो अनुप्रयोग प्राप्त करता है और विफलताओं की अपेक्षा करता है। फ़ाइल एक्सटेंशन अकेले सही मोड स्थापित करने के लिए पर्याप्त नहीं हैं।
यह lxml पार्सर कॉन्फ़िगरेशन पुनर्प्राप्ति व्यवहार, एन्कोडिंग विकल्प और XML-विशिष्ट नियंत्रण का वर्णन करता है। HTML पुनर्प्राप्ति दोषपूर्ण इनपुट से एक उपयोगी वृक्ष बना सकती है, लेकिन यह यह सुनिश्चित नहीं कर सकती कि हर इच्छित संबंध जीवित रहा। एक XML पार्सर संरचनात्मक त्रुटियों को अस्वीकार कर सकता है जिन्हें एक HTML पार्सर स्वीकार करेगा।
एक XML फ़ीड के लिए, नाम क्षेत्र जानकारी और तत्व नामों को बरकरार रखें। HTML-उन्मुख पथ के माध्यम से XML भेजने से एक दोषपूर्ण दस्तावेज़ को उपयोगी दिखाया जा सकता है जबकि इसकी व्याख्या बदल दी जाती है। एक HTML पृष्ठ के लिए, सामान्य वेब मार्कअप को सख्त XML के रूप में मानना ऐसे दस्तावेज़ों को अस्वीकार कर सकता है जिन्हें एक ब्राउज़र सामान्यतः प्रदर्शित करता है।
पार्सिंग के बाद एप्लिकेशन स्तर पर मान्य करें। एक वृक्ष का अस्तित्व यह प्रमाण नहीं है कि एक फ़ीड अपेक्षित आइटम तत्वों को शामिल करता है या एक सूची में एक मान्य शीर्षक है। चयनित पार्सर मोड को निष्कर्षण उदाहरणों के साथ रिकॉर्ड करें ताकि भविष्य में परिवर्तन मौन रूप से दस्तावेज़ अनुबंध को न बदलें।
XPath वृक्ष में संबंधों का वर्णन करता है
XPath नोड का चयन करता है और पथ, पूर्वधारणाएँ, और दस्तावेज़ संबंधों का उपयोग करके मानों की गणना करता है। यह उपयोगी है जब एक फ़ील्ड एक पड़ोसी लेबल या एक विशेष पूर्वज के साथ जुड़ी होती है, न कि एक सुविधाजनक वर्ग नाम के साथ। lxml अपने वृक्ष और तत्व इंटरफेस के माध्यम से XPath अभिव्यक्तियों का समर्थन करता है।
यह XPath अभिव्यक्ति मॉडल एक प्रश्न के संदर्भ को बड़े दस्तावेज़ से अलग करता है। एक आइटम लूप में, एक सापेक्ष प्रश्न वर्तमान आइटम के भीतर रह सकता है, जबकि एक निरपेक्ष या दस्तावेज़-वाइड प्रश्न अन्यत्र मान चुन सकता है। एक प्रश्न जो पाठ को लौटाता है वह वर्तमान रिकॉर्ड के साथ गलत पाठ को भी जोड़ सकता है।
एक चित्रात्मक भाग सूची के लिए, एक भाग का प्रतिनिधित्व करने वाले तत्व की पहचान करें इससे पहले कि उसका नाम और विनिर्देशन मान निकालें। यदि कोई विनिर्देशन गायब है, तो प्रश्न को उस भाग के लिए अनुपस्थित फ़ील्ड उत्पन्न करना चाहिए। दस्तावेज़ में हर विनिर्देशन को चुनना और परिणामों को स्थिति के अनुसार जोड़ना मानों को गलत पंक्तियों में स्थानांतरित कर सकता है।
स्पष्टता से संबंध को उजागर करने वाले अभिव्यक्तियों का उपयोग करें। एक छोटा प्रश्न स्वचालित रूप से एक बेहतर प्रश्न नहीं होता है, और एक लंबा स्थिति संबंधी पथ एक लेआउट के साथ बहुत निकटता से बंधा हो सकता है। रखरखाव प्रक्रिया में प्रश्न और एक प्रतिनिधि स्रोत फ़्रAGMENT को एक साथ रखें ताकि समीक्षकों को यह देख सकें कि संबंध क्यों मान्य है।
नाम क्षेत्र कई खाली XML परिणामों को समझाते हैं
XML नाम क्षेत्र तत्व नामों को नाम क्षेत्र URI द्वारा भेद करते हैं, इसलिए केवल एक दृश्य टैग लेबल तत्व को पहचानने के लिए पर्याप्त नहीं हो सकता है जो आप चाहते हैं। एक दस्तावेज़ इसके तत्वों को एक डिफ़ॉल्ट नाम क्षेत्र में रख सकता है बिना हर टैग पर एक उपसर्ग को प्रदर्शित किए। प्रश्नों को अभी भी उस नाम क्षेत्र को ध्यान में रखना चाहिए।
यह lxml XPath नाम क्षेत्र मैपिंग एक अनुप्रयोग को एक प्रश्न उपसर्ग को संबंधित URI से मानचित्रित करने की अनुमति देता है। प्रश्न में प्रयुक्त उपसर्ग का स्रोत दस्तावेज़ द्वारा चुने गए उपसर्ग से मेल खाना आवश्यक नहीं है; नाम क्षेत्र URI पहचान प्रदान करता है। यह स्रोत फ़ॉर्मेटिंग विकल्पों को आकस्मिक निर्भरताओं में बदलने से रोकता है।
यदि एक XML प्रश्न अचानक कुछ भी नहीं लौटाता है, तो नामित तत्व नामों और नाम क्षेत्र घोषणाओं की जांच करें इससे पहले कि नाम क्षेत्र हैंडलिंग को हटा दें। एक फ़ीड प्रकाशक ने नाम क्षेत्र को बदल दिया हो या एक रैपर पेश किया हो। प्रत्येक स्थानीय नाम से व्यापक मिलान समस्या को छिपा सकता है और विभिन्न शब्दावली से समान रूप से नामांकित तत्वों को एकीकृत कर सकता है।
पाठ निष्कर्षण को पहली टेक्स्ट प्रॉपर्टी से अधिक की आवश्यकता है
lxml पेड़ में टेक्स्ट को एक तत्व और इसके वंशजों के बीच वितरित किया जा सकता है, जिसमें वे टेक्स्ट भी शामिल है जो बच्चे तत्वों के बाद आता है। केवल पहले टेक्स्ट प्रॉपर्टी को पढ़ना इसलिए एक वाक्य को काट सकता है जिसमें एक जोरदार शब्द या एक इनलाइन लिंक शामिल है। उस ऑपरेशन का चयन करें जो आपको आवश्यक पूर्ण टेक्स्ट दायरे के साथ मेल खाता है।
ElementTree मॉडल में, एक बच्चे से पहले का टेक्स्ट और उस बच्चे के बाद का टेक्स्ट अलग से संग्रहित किया जाता है। पूर्ववर्ती को टेल टेक्स्ट कहा जाता है। HTML-उन्मुख तरीके बिना मार्कअप के वंशज टेक्स्ट को एकत्र कर सकते हैं, लेकिन आपका एप्लिकेशन अभी भी यह तय करता है कि व्हाइटस्पेस को कैसे सामान्यीकृत करना है और क्या सन्निकट टुकड़ों को विभाजकों की आवश्यकता है।
प्रदर्शन टेक्स्ट और मशीन मूल्यों के बीच के अंतर को बनाए रखें। एक उत्पाद पृष्ठ एक मुद्रा प्रतीक के बगल में एक प्रारूपित राशि दिखा सकता है जबकि एक एट्रिब्यूट एक पहचानकर्ता रखता है। एक जैसी सफाई फ़ंक्शन के माध्यम से सभी निकाले गए स्ट्रिंग्स को परिवर्तित न करें। शीर्षक, पहचानकर्ता, समृद्ध विवरण और संख्यात्मक क्षेत्रों के लिए अलग correctness नियम होते हैं।
| दस्तावेज़ डिटेल | सामान्य गलती | बेहतर जांच |
|---|---|---|
| नैस्टेड इनलाइन टैग्स | केवल तत्व का पहला टेक्स्ट मान पढ़ें। | पूर्ण वंशज टेक्स्ट और अंतराल की जांच करें। |
| डिफ़ॉल्ट XML नामस्थान | एक अनधिकृत नाम का क्वेरी करें। | स्पष्ट रूप से नामस्थान URI का मानचित्र बनाएं। |
| वैकल्पिक विनिर्देश | स्थिति के अनुसार वैश्विक परिणाम सूचियों को जोड़ें। | प्रत्येक आइटम कंटेनर के भीतर निकालें। |
| खराब HTML | पुनर्प्राप्ति इरादे को सुरक्षित मानें। | पुनर्प्राप्त रिकॉर्ड संरचना को मान्य करें। |
बड़े दस्तावेज़ों के लिए एक मेमोरी रणनीति आवश्यक है
बड़े दस्तावेज़ प्रसंस्करण में पूरे पेड़ को बनाए रखने और तत्वों को क्रमशः उपभोग करने के बीच एक जानबूझकर विकल्प की आवश्यकता होती है। एक पूरा पेड़ मनमाने नेविगेशन के लिए सुविधाजनक होता है। क्रमिक पार्सिंग तब उपयोगी होती है जब इनपुट में कई स्वतंत्र रिकॉर्ड होते हैं जिन्हें अनुक्रम में संसाधित और जारी किया जा सकता है।
lxml का iterparse इंटरफेस डॉक्यूमेंट के पार्स करते समय घटनाओं को प्रदान करता है, लेकिन केवल क्रमिक पढ़ाई कम मेमोरी उपयोग की गारंटी नहीं देती है। एप्लिकेशन अभी भी तत्वों, परिणाम वस्तुओं या पैतृक संदर्भों को बनाए रख सकता है। आवश्यक वंशज पढ़े जाने के बाद ही संसाधित डेटा को रिलीज़ करें, और मूल पेड़ के लिए अनावश्यक संदर्भों को रखने से बचें।
पूर्ण पथ को मापें। एक पार्सर मामूली मेमोरी का उपयोग कर सकता है जबकि एक आउटपुट सूची बिना किसी सीमा के बढ़ती है। एक स्टोरेज स्टेज जो सम्मिलित रिकॉर्ड को क्रमिक रूप से लिखता है, एक छोटे पार्सिंग ऑप्टिमाइज़ेशन से अधिक महत्वपूर्ण हो सकता है। बड़े आयात का निदान करते समय दस्तावेज़ आकार, रखे गए रिकॉर्ड और आउटपुट बफरिंग को स्वतंत्र रूप से ट्रैक करें।
अविश्वासनीय XML के लिए पार्सर सेटिंग्स को भी स्पष्ट निर्णय की आवश्यकता होती है। बाहरी दस्तावेज़ लोडिंग और एंटिटी हैंडलिंग सामान्य फ़ील्ड चयन से अलग होती है। स्थापित पार्सर संस्करण और आपके द्वारा स्वीकार किए गए इनपुट के लिए प्रलेखित नियंत्रणों का उपयोग करें, न कि केवल किसी अस्पष्ट दस्तावेज़ को पार्स करने के लिए प्रतिबंधों को ढीला करने के लिए।
lxml का Beautiful Soup और ब्राउज़र अधिग्रहण के साथ कैसे फिट होता है
lxml को सीधे या Beautiful Soup के लिए एक पार्सर बैकएंड के रूप में उपयोग किया जा सकता है, जबकि ब्राउज़र अधिग्रहण वे दस्तावेज़ प्रदान करता है जिन्हें पृष्ठ निष्पादन की आवश्यकता होती है। सीधे lxml का उपयोग आपको इसका मूल पेड़ और क्वेरी सतह देता है। Beautiful Soup एक चयनित पार्सर के शीर्ष पर अपनी स्वयं की यात्रा इंटरफ़ेस जोड़ता है। ये संगत परतें हैं न कि परस्पर अनन्य उत्पाद श्रेणियाँ।
गतिशील पृष्ठों के लिए, Scrapeless Scraping Browser निकासी से पहले आवश्यक ब्राउज़र निष्पादन प्रदान करता है। Scraping Browser सेवा अवलोकन प्रबंधित ब्राउज़र संचालन का वर्णन करता है। lxml फिर अधिग्रहित मार्कअप पर कार्य करता है और HTML स्ट्रिंग से एक लाइव ब्राउज़र सत्र को विरासत में नहीं लेता।
संबंधित HTML निकासी दृष्टिकोण पार्सिंग को एक बड़े संग्रह कार्यप्रवाह के भीतर रखने में मदद करते हैं। जब ब्राउज़र अधिग्रहण की आवश्यकता होती है, तो Scrapeless मूल्य निर्धारण का उपयोग करें, और आवश्यक जानकारी पहले से मौजूद दस्तावेज़ों के लिए सीधी पार्सिंग बनाए रखें।
निष्कर्ष
lxml उन Python कार्यप्रवाहों के लिए एक मजबूत फिट है जिन्हें सटीक HTML या XML पेड़ प्रसंस्करण की आवश्यकता होती है। सही पार्सर मोड का चयन करें, नामस्थान का सम्मान करें, और थ्रूपुट को ऑप्टिमाइज़ करने से पहले टेक्स्ट और फ़ील्ड संबंधों को मान्य करें। इसका मूल्य दस्तावेज़ संरचना को उपयोगी बनाने से आता है; अधिग्रहण, क्रॉल दायरा, और व्यावसायिक मान्यता एप्लिकेशन के स्पष्ट भाग बने रहते हैं।
अपने Python पार्सर के लिए गतिशील HTML प्राप्त करें
जब दस्तावेज़ को ब्राउज़र निष्पादन की आवश्यकता हो, तो Scrapeless Scraping Browser का उपयोग करें, फिर अपने lxml निकासी और मान्यता नियम लागू करें।
आज ही साइन अप करें और प्राप्त करें $5 मुफ्त क्रेडिट — कोई क्रेडिट कार्ड आवश्यक नहीं है.
अपने $5 क्रेडिट का दावा करें →FAQ
प्रश्न: क्या lxml जावास्क्रिप्ट चलाता है?
lxml HTML दस्तावेज़ में स्क्रिप्ट चलाता नहीं है। यह उसे दी गई मार्कअप को पार्स करता है। यदि आवश्यक तत्व केवल एक ब्राउज़र द्वारा पृष्ठ रेंडर करने के बाद मौजूद होते हैं, तो lxml क्वेरीज लागू करने से पहले उस रेंडर की गई स्थिति को प्राप्त करें।
प्रश्न: XPath XML में स्पष्ट तत्वों को क्यों छोड़ देता है?
एक XPath क्वेरी दृश्य XML तत्वों को छोड़ सकती है क्योंकि उनके नाम एक नामस्थान से संबंधित होते हैं जिसे क्वेरी नहीं संबोधित करती। नामस्थान URI की जांच करें और इसे क्वेरी में मैप करें। यह भी पुष्टि करें कि क्या व्यंजना वर्तमान तत्व के सापेक्ष है या दस्तावेज़ मूल से शुरू होती है।
प्रश्न: क्या lxml Beautiful Soup का एक विकल्प है?
आप lxml को सीधे एक पार्सिंग इंटरफेस के रूप में उपयोग कर सकते हैं, या इसे Beautiful Soup के लिए एक बैकएंड के रूप में चुन सकते हैं। सीधे lxml का उपयोग इसकी मूल पेड़ और XPath क्षमताओं को उजागर करता है। Beautiful Soup एक अलग नेविगेशन इंटरफेस प्रदान करता है जबकि अभी भी चुने हुए पार्सर पर निर्भर करता है पेड़ बनाने के लिए।
प्रश्न: क्या वृद्धिमान पार्सिंग हमेशा मेमोरी को कम करती है?
वृद्धिमान पार्सिंग केवल तभी दस्तावेज़ को एक साथ पढ़ने और बनाए रखने की आवश्यकता को कम करती है जब एप्लिकेशन प्रसंस्कृत तत्वों को भी मुक्त करता है और अपने आउटपुट बफर को सीमित करता है। हर तत्व के लिए संदर्भ बनाए रखना या हर परिणाम को एक सूची में संग्रहित करना मेमोरी की लागत को बहुत हद तक रख सकता है।