BeautifulSoup क्या है?
Scrapeless Web Unlocker सार्वजनिक-पृष्ठ HTML लौटा सकता है जो BeautifulSoup का उपयोग करने वाले पायथन कार्यक्रमों के लिए पार्सिंग परत के रूप में।
TL;DR
- BeautifulSoup HTML और XML पार्स करने के लिए एक पायथन पुस्तकालय है। यह मार्कअप को एक नेविगेट करने योग्य ट्री के रूप में प्रस्तुत करता है।
- BeautifulSoup पृष्ठों को नहीं लाता है या JavaScript नहीं चलाता है। एक और घटक को मार्कअप प्रदान करना चाहिए।
- पार्सर बैकेंड ट्री को प्रभावित करता है। गड़बड़ दस्तावेजों के मामले में बैकेंड चुनें और स्थिर रखें।
- सेलेक्टर्स को एक रिकॉर्ड सीमा की आवश्यकता होती है। एक आइटम के भीतर स्कोप फ़ील्ड लुकअप करें और आवश्यक मानों को मान्य करें।
BeautifulSoup, जिसे सामान्यतः beautifulsoup4 पैकेज से bs4 के रूप में आयात किया जाता है, मार्कअप को टैग, विशेषताओं, और पाठ के ट्री में पार्स करता है। पायथन कोड उस ट्री की खोज कर सकता है, माता-पिता और भाई-बहनों के माध्यम से यात्रा कर सकता है, और चयनित तत्वों से मान निकाल सकता है। यह एक HTML पृष्ठ को संरचित सामग्री के रूप में पढ़ने के लिए उपयोगी है, न कि इसे अनुदेशित स्ट्रिंग के रूप में देखने के लिए।
पुस्तकालय की एक सटीक सीमा होती है। यह अपने आप में HTTP अनुरोध नहीं करता है, और एक स्क्रिप्ट टैग को पार्स करने से स्क्रिप्ट नहीं चलती। HTML प्रदान करने के लिए एक HTTP क्लाइंट, स्थानीय फ़ाइल, या रेंडरर होना चाहिए। परिणाम की गुणवत्ता तब उस सीमा के दोनों पक्षों पर निर्भर करती है: वह प्रतिनिधित्व जो आपने प्राप्त किया है और वह सेलेक्टर्स जो आपने इसके लिए लिखे हैं।
BeautifulSoup मार्कअप को ट्री में कैसे बदलता है
एक पार्सर मार्कअप पढ़ता है और तत्वों और पाठ के लिए नोड्स बनाता है। BeautifulSoup उन नोड्स को टैग और नेविगेट करने योग्य स्ट्रिंग के रूप में उजागर करता है, जो पदानुक्रम के माध्यम से चलने के लिए तरीके और गुण होते हैं। सरकारी Beautiful Soup दस्तावेज़ खोज विधियों, CSS सेलेक्टर्स, विशेषताओं और ट्री नेविगेशन के बारे में विस्तार से बताता है। ट्री प्रदान किए गए मार्कअप का एक मॉडल है, न कि एक लाइव ब्राउज़र DOM।
एक उत्पाद कार्ड की कल्पना करें जिसमें एक लेख का लपेटा, एक शीर्षक, एक लिंक और एक मूल्य का क्षेत्र है। BeautifulSoup लेख को ढूंढ सकता है, फिर केवल उस लेख के भीतर क्षेत्रों के लिए खोज सकता है। इससे मानों के बीच संबंध संरक्षित होता है। यदि मूल्य अनुपस्थित है, तो कार्ड एक रिकॉर्ड बना रहता है जिसमें एक गायब वैकल्पिक क्षेत्र होता है, न कि हर बाद की कीमत को गलत शीर्षक के साथ जोड़ने का कारण बनाता है।
पार्सर टिप्पणियां, स्क्रिप्ट, और छिपा हुआ मार्कअप भी उजागर कर सकता है। संदर्भ को समझे बिना हर पाठ नोड का चयन करना नेविगेशन, कानूनी नोटिस, या अंतर्निहित डेटा को परिणाम में खींच सकता है। एक महत्वपूर्ण कंटेनर से शुरू करें और एक छोटा स्कीमा लिखें। एक अच्छा सेलेक्टर यह बयान है कि कौन सा पृष्ठ संरचना उस रिकॉर्ड का प्रतिनिधित्व करती है जो आप चाहते हैं। HTTP प्रतिनिधित्व मॉडल हमें याद दिलाता है कि पार्सर पर भरोसा करने से पहले प्राप्त शरीर और इसके मेटाडेटा की जांच करें।
पार्सर बैकेंड और गड़बड़ HTML
BeautifulSoup पार्सिंग को एक बैकेंड को सौंपता है। पायथन का अंतर्निहित html.parser आसानी से उपलब्ध है; अन्य बैकेंड में विभिन्न स्थापना आवश्यकताएँ और पुनर्प्राप्ति व्यवहार हो सकते हैं। अमान्य नोडिंग, छोड़े गए समापन टैग, और असामान्य दस्तावेज़ टुकड़े विभिन्न पार्सर्स के तहत विभिन्न ट्री उत्पन्न कर सकते हैं। बैकेंड को कोड में पिन करें और इसे प्रतिनिधि स्रोत मार्कअप के खिलाफ टेस्ट करें, न कि किसी भी पार्सर पर भरोसा करने के लिए जो स्थापित हो सकता है।
पायथन का html.parser संदर्भ एक निम्न-स्तरीय इवेंट-प्रेरित इंटरफ़ेस का वर्णन करता है। BeautifulSoup एक चुने हुए पार्सर पर एक उच्च-स्तरीय खोज और नेविगेशन परत प्रदान करता है। यह भेद तब मायने रखता है जब किसी प्रोजेक्ट को एक विशेष गड़बड़ दस्तावेज़ के बारे में तर्क करने की आवश्यकता होती है: बैकेंड स्विचिंग एक टैग के माता-पिता को बदल सकती है, जो एक स्कोप्ड सेलेक्टर को बदल देती है, भले ही दृश्य ब्राउज़र पृष्ठ समान दिखता हो।
एक ब्राउज़र अपने स्वयं के पार्सिंग नियमों के तहत HTML को मरम्मत कर सकता है और फिर JavaScript को DOM को फिर से संशोधित करने दे सकता है। इसलिए BeautifulSoup द्वारा कच्चे प्रतिक्रिया की पार्सिंग एक ट्री उत्पन्न कर सकती है जो ब्राउज़र निष्पादन के बाद कैप्चर किए गए स्नैपशॉट से भिन्न हो सकती है। एक सेलेक्टर को दोष देने से पहले, पार्सर को दिए गए सही इनपुट की तुलना करें और उस मार्कअप की जांच करें जो आपने डेवलपर टूल्स में किया।
ढूंढें, सभी को ढूंढें, और CSS चयन
find एक खोज स्कोप के तहत पहले मिलाने वाले तत्व को लौटाता है, जबकि find_all मिलान लौटाता है। select ट्री पर एक CSS चयनकर्ता लागू करता है, और select_one एक मिलाने वाले तत्व को लौटाता है। उस रूप को चुनें जो प्रश्न को स्पष्ट रूप से व्यक्त करता है। एक साधारण टैग और विशेषता की शर्त find के साथ बेहतर पढ़ सकती है; एक संबंध जैसे कि एक कार्ड के भीतर एक एंकर CSS चयनकर्ता के रूप में बेहतर पढ़ा जा सकता है।
सेलेक्टर्स को संक्षिप्त और सार्थक बने रहना चाहिए। एक सेमांटिक लेख टैग, स्थिर डेटा विशेषता, या ज्ञात शीर्षक संबंध आमतौर पर एक उत्पन्न कक्षा श्रृंखला की तुलना में कम नाजुक होते हैं। जब एक आइटम में कई लिंक हो सकते हैं, तो उस लिंक की पहचान करें जिसका भूमिका स्कीमा के अनुकूल है, न कि पहले एंकर को लेने के लिए। एंकर टेक्स्ट और गंतव्य दोनों की जांच करें। एक सापेक्ष href को अंतिम पृष्ठ URL के खिलाफ हल करें ताकि एक टूटे हुए रिकॉर्ड को बाहर निकालने से बच सके।
पाठ सामान्यीकरण एक अलग क्रिया है। get_text वंशज पाठ को एकत्र कर सकता है, लेकिन स्पेसिंग और छिपी हुई सामग्री की समीक्षा की आवश्यकता होती है। जहाँ सटीक विराम चिह्न, इकाइयाँ, या मुद्रा महत्वपूर्ण हैं, वहाँ मूल स्ट्रिंग को संरक्षित करें; विश्लेषण के लिए सामान्यीकृत प्रदर्शन मान का उपयोग करें। select का परिणाम नोड्स की एक सूची है, न कि स्वचालित रूप से एक मान्य डेटासेट।
जब एक लिंक का चयन करते हैं, तो डिस्प्ले टेक्स्ट को गंतव्य से अलग करें। एक कार्ड में विभिन्न लक्ष्यों के साथ एक नेविगेशन लिंक, इमेज लिंक और क्रिया लिंक हो सकती है। उस लिंक का चयन करें जो रिकॉर्ड कुंजी से मेल खाता है, इसे अंतिम पृष्ठ URL के खिलाफ हल करें, और मेज़बान या पथ को मान्य करें। यदि पृष्ठ में एक वैध लिंक है, तो यह मानना न करें कि हर कार्ड href पहले से ही वैध है। कच्चे href और सामान्यीकृत URL को बनाए रखना बाद में स्रोत परिवर्तनों का निदान करना आसान बना सकता है।
BeautifulSoup क्या नहीं कर सकता
BeautifulSoup एक पृष्ठ को JavaScript निष्पादित करने, ब्राउज़र सत्र खोलने, नियंत्रण पर क्लिक करने या नेटवर्क प्रतिक्रिया की प्रतीक्षा करने में सक्षम नहीं है। यदि प्रारंभिक HTML में लक्षित रिकॉर्डों की कमी है, तो पुस्तकालय उस अधूरे दस्तावेज़ को वफादारी से पार्स करेगा। पहले यह जांचें कि उपयुक्त संरचित एंडपॉइंट डेटा содержит करता है; यदि नहीं, तो ब्राउज़र-सक्षम पथ का उपयोग करके रेंडर किया गया HTML प्राप्त करें।
यह Web Unlocker JS Render प्रलेखन एक ब्राउज़र निष्पादन विकल्प का वर्णन करता है जो HTML को वापस कर सकता है। BeautifulSoup फिर वापस किए गए मार्कअप को पार्स कर सकता है। श्रम का यह विभाजन उपयोगी है: अधिग्रहण पहुंच और रेंडरिंग का समाधान करता है, जबकि Python पार्शल फ़ील्ड चयन और सामान्यकरण का मालिक होता है। आपको अभी भी यह सत्यापित करने की आवश्यकता है कि रेंडर किया गया परिणाम अपेक्षित पृष्ठ स्थिति तक पहुंच गया।
एक पार्स किया गया पेड़ यह भी निर्धारित नहीं कर सकता कि संग्रह की अनुमति है या नहीं। साइट की शर्तें, गोपनीयता के दायित्व और संचालन का भार चारों ओर के कार्यप्रवाह से संबंधित होते हैं। यह यह भी तय नहीं कर सकता कि कोई मूल्य वर्तमान है या कोई शीर्षक सही उत्पाद शीर्षक है बिना रिकॉर्ड-स्तरीय स्वीकृति नियम के। पार्सर को संरचना के लिए एक उपकरण के रूप में मानें, व्यापार सत्य की गारंटी के रूप में नहीं।
एक विश्वसनीय BeautifulSoup कार्यप्रवाह
पहले आउटपुट फ़ील्ड और आवश्यक पृष्ठ मार्कर परिभाषित करें। एक अनुमति प्राप्त पृष्ठ लाएँ, अंतिम URL, स्थिति और मीडिया प्रकार की जाँच करें, और शरीर के एक नमूने का निरीक्षण करें। फिर एक स्पष्ट पार्सर के साथ एक सूप बनाएँ। रिकॉर्ड कंटेनरों का चयन करें और प्रत्येक कंटेनर के अंदर फ़ील्ड पढ़ें। मानों का सामान्यीकरण करें, URLs को हल करें, आवश्यक फ़ील्डों को मान्य करें, और अस्वीकृत आइटम रिकॉर्ड करें। जब उपयोग का मामला ट्रेसबिलिटी की आवश्यकता हो, तो स्रोत संदर्भ के साथ स्वीकृत रिकॉर्ड सहेजें।
आवधिक निष्कर्षण के लिए, दो जांचें रखें। एक पार्सर-स्तरीय परीक्षण सहेजे गए प्रतिनिधि मार्कअप का उपयोग करके चयनकर्ताओं की पुष्टि करता है। एक छोटा जीवित अधिग्रहण परीक्षण पुष्टि करता है कि वर्तमान पृष्ठ अभी भी अपेक्षित पहचान और संरचना को लौटाता है। यदि केवल पार्सर परीक्षण पास होता है, तो एक नया लॉगिन दीवार या परिवर्तित प्रतिक्रिया उत्पादन कार्य को खाली छोड़ सकती है। यदि केवल जीवित परीक्षण बिना फ़ील्ड जांच के पास होता है, तो कार्य चुपचाप गलत मानों को संग्रहीत कर सकता है।
पार्सर आउटपुट को भी स्पष्ट सीमाओं की आवश्यकता होती है। एक पृष्ठ जिसमें बहुत बड़ा शरीर या गहराई से नेस्टेड गलत मार्कअप होता है, वह आश्चर्यजनक समय और मेमोरी का उपभोग कर सकता है। अधिग्रहण परत में एक संवेदनशील प्रतिक्रिया-आकार सीमा निर्धारित करें और जब एक स्कोपित तत्व पर्याप्त हो तब पूरे-पृष्ठ पाठ को संग्रहित करने से बचें। इससे पार्सिंग चरण पूर्वानुमानित रहता है जबकि यह स्पष्ट डायग्नोस्टिक छोड़ता है जब एक स्रोत पृष्ठ अपेक्षित आकार से बड़ा हो जाता है।
यह Web Unlocker उत्पाद पृष्ठ सार्वजनिक-पृष्ठ पुनर्प्राप्ति का वर्णन करता है, जबकि संबंधित BeautifulSoup गाइड स्थिर और गतिशील अधिग्रहण विकल्पों के माध्यम से चलता है। इन विकल्पों का उपयोग पार्सर को सरल रखने के लिए करें: इसे सही HTML प्राप्त करना चाहिए और एक मान्य रिकॉर्ड लौटाना चाहिए, यह अनुमान नहीं लगाना चाहिए कि पृष्ठ उस स्थिति तक कैसे पहुँचा।
निष्कर्ष
BeautifulSoup एक व्यावहारिक Python इंटरफ़ेस है HTML या XML पार्स पेड़ के लिए। इसकी ताकतें खोजने, घूमने और पहले से प्रदान किए गए मार्कअप से निष्कर्षण हैं। एक पार्सर बैकएंड चुनें, चयनकर्ताओं को रिकॉर्ड पर निर्दिष्ट करें, और विश्वसनीय डेटासेट पर भरोसा करने से पहले पृष्ठ अधिग्रहण पथ को सत्यापित करें।
HTML पुनर्प्राप्ति को Python पार्सिंग से जोड़ें
एक प्रलेखित Scrapeless पुनर्प्राप्ति पथ का उपयोग करें और एक सत्यापित प्रतिक्रिया को एक छोटे रिकॉर्ड स्कीमा में पार्स करें।
आज ही साइन अप करें और पाएं $5 का मुफ्त क्रेडिट — कोई क्रेडिट कार्ड आवश्यक नहीं है.
अपने $5 क्रेडिट का दावा करें →सामान्य प्रश्न
क्या BeautifulSoup एक वेब ब्राउज़र है?
नहीं। BeautifulSoup प्रदत्त मार्कअप को एक नेविगेटेबल ट्री में पार्स करता है। यह स्क्रिप्ट निष्पादित नहीं करता है, एक लाइव पृष्ठ का प्रबंधन नहीं करता है, या नियंत्रण पर क्लिक नहीं करता है। एक ब्राउज़र या रेंडरर एक अलग अधिग्रहण घटक है।
क्या BeautifulSoup एक URL लाता है?
नहीं। मार्कअप प्राप्त करने के लिए पहले HTTP क्लाइंट, एक स्थानीय फ़ाइल, या रेंडरिंग सेवा का उपयोग करें। इसकी सामग्री को BeautifulSoup को देने से पहले प्रतिक्रिया यह सुनिश्चित करें कि यह इच्छित पृष्ठ है।
मुझे कौन सा BeautifulSoup विधि का उपयोग करना चाहिए?
प्रत्यक्ष टैग और एट्रिब्यूट प्रश्नों के लिए find या find_all का उपयोग करें, और CSS-शैली संरचनात्मक प्रश्नों के लिए select या select_one का उपयोग करें। उस विधि का चयन करें जो रिकॉर्ड सीमा को स्पष्ट बनाती है और इसे प्रतिनिधि मार्कअप के खिलाफ परीक्षण करें।
क्या पार्सर विकल्प परिणाम को बदल सकता है?
हाँ। बैकएंड गलत HTML को विभिन्न तरीके से ठीक कर सकते हैं, जो विभिन्न माता-पिता-शिशु संबंध पैदा करते हैं। चुने हुए पार्सर को स्थिर करें और चयनकर्ताओं का परीक्षण उस प्रकार के पृष्ठों के खिलाफ करें जो कार्यप्रवाह वास्तव में प्राप्त करता है।
क्या BeautifulSoup रेंडर किया हुआ HTML पार्स कर सकता है?
हाँ। एक बार जब एक ब्राउज़र-सक्षम घटक अंतिम HTML स्नैपशॉट प्रदान करता है, तो BeautifulSoup इसे पार्स कर सकता है। यह स्वयं रेंडरिंग नहीं करता है, और कार्यप्रवाह को अभी भी यह पुष्टि करनी होगी कि स्नैपशॉट में इच्छित स्थिति है।