पाइथन में एचटीएमएल को पार्स करने का तरीका
स्क्रेपलेस वेब अनलॉकर पाइथन कार्यक्रमों के लिएFetched या रेंडर्ड सार्वजनिक-पृष्ठ एचटीएमएल प्रदान कर सकता है जो अपने खुद के पार्सिंग और मान्यता करता है।
संक्षिप्त जानकारी
- एचटीएमएल पार्सिंग अधिग्रहण के बाद शुरू होती है। निर्माण से पहले सुनिश्चित करें कि प्रतिक्रिया वांछित पृष्ठ है।
- पाइथन में अंतर्निहित और थर्ड-पार्टी पार्सर होते हैं। एक जानबूझकर चुनें क्योंकि गलत रूपांकित मार्कअप विभिन्न पेड़ उत्पन्न कर सकता है।
- रिकॉर्ड के भीतर दायरा चयनकर्ता। नजदीकी वस्तुओं को मिश्रित करने से बचने के लिए एक ही कार्ड या पंक्ति से संबंधित फ़ील्ड निकालें।
- पार्सिंग पृष्ठ जावास्क्रिप्ट नहीं चला सकता। यदि लक्ष्य केवल ब्राउज़र निष्पादन के बाद दिखाई देता है, तो अधिग्रहण पथ को बदलें।
पाइथन में एचटीएमएल पार्स करने के लिए, मार्कअप प्राप्त करें, एक दस्तावेज़ पेड़ बनाएं, प्रासंगिक तत्वों का चयन करें, और आप जो मान खोजते हैं उन्हें सामान्य करें। पार्सर केवल एक चरण है। यदिFetched पृष्ठ एक लॉगिन प्रॉम्प्ट या जावास्क्रिप्ट शेल है, तो सही चयनकर्ता कोड अभी भी गलत परिणाम उत्पन्न करता है। जिस सटीक फ़ील्ड की आपको आवश्यकता है और जो पृष्ठ मार्कर दिखाता है कि लौटाया गया दस्तावेज़ वांछित है, उसे लिखना शुरू करें।
यह कार्यप्रवाह लागू होता है चाहे एचटीएमएल एक स्थानीय सहेजे गए फ़ाइल, एक अनुमत HTTP अनुरोध, या एक रेंडरिंग सेवा से हो। ब्यूटीफुलसूप नेविगेशन और CSS चयन के लिए एक सुविधाजनक पुस्तकालय है, जबकि पाइथन का मानक html.parser निचले स्तर के घटना कॉलबैक को उजागर करता है। चयन को निष्कर्षण कार्य का पालन करना चाहिए। कुछ स्थिर टैग के साथ एक छोटा पृष्ठ बिगड़ते मार्कअप से अलग होता है जिसमें नेस्टेड कार्ड और वैकल्पिक मान होते हैं।
पार्सिंग से पहले सही एचटीएमएल प्राप्त करें।
एक HTTP क्लाइंट प्रारंभिक प्रतिक्रिया डाउनलोड करता है; यह स्वचालित रूप से पृष्ठ स्क्रिप्ट को निष्पादित नहीं करता है। अंतिम URL, स्थिति, मीडिया प्रकार, और प्रतिक्रिया बॉडी में अपेक्षित मार्कर की जांच करें। एक पृष्ठ 200 और टेक्स्ट/एचटीएमएल लौट सकता है जबकि डेटा सेट के बजाय एक नोटिस हो सकता है। विकास के दौरान एक छोटा प्रतिनिधि प्रतिक्रिया सहेजें, जिसमें क्रेडेंशियल्स हटा दिए जाएं, ताकि चयनकर्ता परिवर्तनों को पहले के परिणाम उत्पन्न करने वाले सही बाइट्स के खिलाफ परीक्षण किया जा सके।
द HTTP अर्थशास्त्र मानक व्याख्या करता है कि स्थिति और प्रतिनिधित्व मेटाडेटा शरीर के अनुप्रयोग अर्थ से अलग क्यों हैं। पार्सिंग के लिए, इसका मतलब है कि संरचना की सफलता को आवश्यक लेकिन अपर्याप्त मानना। यदि प्रतिक्रिया संकुचित या एन्कोडेड है, तो इसे घोषित मेटाडेटा के अनुसार डिकोड करने दें। हर विरासत पृष्ठ के लिए UTF-8 का मैन्युअल रूप से अनुमान लगाने से बचें।
यदि कच्ची प्रतिक्रिया से रिकॉर्ड अनुपस्थित हैं लेकिन एक ब्राउज़र में पृष्ठ लोड होने के बाद दिखाई देते हैं, तो अनुमत संरचित प्रतिक्रिया के लिए नेटवर्क पैनल की जांच करें। जब ब्राउज़र निष्पादन वास्तव में आवश्यक हो, तो एक रेंडरिंग पथ का उपयोग करें जैसे कि प्रलेखित वेब अनलॉकर जेएस रेंडर।. यह निष्पादन के बाद एचटीएमएल लौटा सकता है; फिर पाइथन पार्सर उस लौटाए गए प्रतिनिधित्व पर काम करता है। रेंडरिंग यह बदलती है कि मार्कअप कहाँ से आता है, न कि ब्यूटीफुलसूप इसे कैसे व्याख्या करता है।
स्पष्ट बैकएंड के साथ एक पार्स वृत्त बनाएं।
ब्यूटीफुलसूप मार्कअप और एक नामित पार्सर बैकएंड, जैसे कि पाइथन का अंतर्निहित html.parser स्वीकार करता है। इसका आधिकारिक दस्तावेज़ व्याख्या करता है कि टैग, टेक्स्ट, और विशेषताओं के वृत्त का कैसे पता लगाया जा सकता है। कोड में पार्सर को लागू करें बजाय इसके कि पर्यावरण-निर्भर डिफ़ॉल्ट की अनुमति दें। विभिन्न बैकएंड बिगड़ते एचटीएमएल को अलग-अलग तरीके से ठीक कर सकते हैं, माता-पिता-बच्चे के रिश्ते को बदलते हुए और इसलिए चयनकर्ता परिणाम।
एक छोटे से आत्म-निहित इनपुट के लिए, एक लेख तत्व की कल्पना करें जिसमें एक h2 शीर्षक, एक href वाला एंकर, और एक स्पैन जिसमें एक कीमत है। उस मार्कअप से एक सूप बनाएं, पहले लेख का चयन करें, फिर इसके भीतर हर फ़ील्ड को पढ़ें। यह दायरा मायने रखता है: पृष्ठ पर हर h2 और हर मूल्य स्पैन को अलग से चुनना तब असंगत सूचियाँ उत्पन्न कर सकता है जब एक लेख में मूल्य न हो। एक रिकॉर्ड-उन्मुख पार्सर प्रत्येक लेख को निष्कर्षण की इकाई के रूप में मानता है।
पाइथन का html.parser मॉड्यूल एक और विकल्प है जब आप चाहते हैं कि टैग और डेटा को पढ़ते समय कॉलबैक हों। यह ब्यूटीफुलसूप के समान सुविधाजनक CSS चयन और वृत्त नेविगेशन इंटरफ़ेस प्रदान नहीं करता है। इसे एक संकीर्ण स्ट्रीमर-शैली कार्य के लिए चुनें, न कि यह सार्वभौमिक रूप से अधिक सही है। चयनित पार्सर का परीक्षण बिगड़ते और अच्छी तरह से बने पृष्ठों के खिलाफ करें।
स्थिर संरचना का उपयोग कर फ़ील्ड चुनें।
एक CSS चयनकर्ता एक अर्थपूर्ण तत्व, एक स्थिर विशेषता, या एक छोटे माता-पिता-बच्चे के संबंध को लक्षित कर सकता है। जब पृष्ठ अर्थपूर्ण आईडी को उजागर करता है तो article[data-id] जैसे चयनकर्ता का उपयोग करें, फिर प्रत्येक लेख के भीतर शीर्षक और लिंक का चयन करें। दृश्य लेआउट से बंधी बनाई गई क्लास के लंबे श्रृंखला से बचें। डिजाइन में बदलाव के दौरान वे क्लास बदल सकते हैं जबकि डेटा फ़ील्ड अवधारणात्मक रूप से समान रहते हैं।
ब्यूटीफुलसूप चयन विधि CSS चयनकर्ता वाक्यविन्यास को स्वीकार करती है, जबकि find और find_all उपयोगी होते हैं जब आपको विशेषता परीक्षण या कस्टम पूर्वाग्रह की आवश्यकता होती है। चयनकर्ताओं को रिकॉर्ड अनुबंध को व्यक्त करना चाहिए, केवल यह नहीं कि आज सही गणना लौटाने के लिए। चयनित तत्व के पाठ और विशेषताओं का एक प्रतिनिधि पृष्ठ पर निरीक्षण करें। यदि एक चूक वाला फ़ील्ड वैध है, तो इसे स्पष्ट रूप से null या एक खाली वैकल्पिक मूल्य के रूप में दर्शाएं बजाय इसके कि अनुक्रमिक फ़ील्ड को गलत रिकॉर्ड में स्थानांतरित करें।
चयन के बाद निकाले गए मानों को सामान्य करें। प्रदर्शन पाठ के लिए लेआउट के सफेद स्थान को संकुचित करें, जब सटीकता मायने रखती है तो मूल कच्चा मान बनाए रखें, और अंतिम प्रतिक्रिया URL के खिलाफ सापेक्ष href मानों को हल करें। बिना देखे गए रीडायरेक्ट के बाद अनुरोधित URL को मूल के रूप में उपयोग न करें। यदि एक पृष्ठ विभिन्न मुद्राओं में कीमतें सूचीबद्ध करता है, तो संख्यात्मक मूल्य के साथ मुद्रा रखें बजाय इसके कि हर गैर-अंक चरित्र को हटा दें और अर्थ खो दें।
रिकॉर्ड का मान्य करें, केवल चयनकर्ता नहीं।
एक चयनकर्ता जो एक नोड लौटाता है, यह साबित नहीं करता है कि नोड अपेक्षित रिकॉर्ड है। एक अद्वितीय पृष्ठ मार्कर, रिकॉर्ड आईडी या कैनोनिकल यूआरएल और आवश्यक फ़ील्ड्स की जांच करें। यह मान्य करें कि एक लिंक अनुमत होस्ट की ओर इशारा करता है और कि एक शीर्षक खाली नहीं है। यदि कोई फ़ील्ड वैकल्पिक है, तो इसे स्कीमा में अनुपस्थिति के रूप में परिभाषित करें। दस नोड्स वाला एक पार्स परिणाम अभी भी अक्सर कार्ड या नेविगेशन टीज़र रख सकता है, जो इच्छित आइटम के बजाय हो सकते हैं।
पैजिनेशन एक और सीमा जोड़ता है। एक सत्यापित अगले लिंक या प्रलेखित कर्सर का पालन करें, सामान्यीकृत यूआरएल या रिकॉर्ड आईडी का एक दौरा सेट बनाएं, और एक स्पष्ट अंत शर्त पर रुकें। पृष्ठों की एक निश्चित संख्या एक सीमा है, यह सबूत नहीं है कि संग्रह स्वाभाविक रूप से समाप्त हो गया। स्वीकृत रिकॉर्ड, अस्वीकृत रिकॉर्ड, और चयनकर्ता चूक को अलग से मापें ताकि एक लेआउट परिवर्तन डाउनस्ट्रीम विश्लेषण से पहले स्पष्ट रूप से दिखाई दे सके जो आंशिक बैच को पूरा मानता है।
एक छोटा फिक्स्चर जो अनुमोधित सार्वजनिक HTML से निकाला गया है, शुद्ध निष्कर्षण तर्क का परीक्षण करने में सहायक हो सकता है, लेकिन यह साबित नहीं करता कि लाइव अधिग्रहण पथ अभी भी उस HTML को वापस लौटाता है। एक एकीकरण जांच रखिए जो एक वर्तमान पृष्ठ को लाती है और पहचान की पुष्टि करती है। संबंधित BeautifulSoup वेब स्क्रैपिंग गाइड निश्चित रूप से इसी कारण से स्थिर अधिग्रहण को गतिशील रेंडरिंग से अलग करता है।
निर्णय लें कि कब संरचित डेटा को प्रस्तुत करना है या इसका उपयोग करना है
जब कच्चा HTML पहले से लक्षित क्षेत्रों को शामिल करता है, तो एक ब्राउज़र को रेंडर करना समय और स्थिति जोड़ता है बिना निकासी में सुधार किए। जब पन्ना एक अधिकृत JSON एंडपॉइंट को लोड करता है जो आवश्यक क्षेत्रों को उजागर करता है, तो उस प्रतिक्रिया को पढ़ना DOM से प्रदर्शन पाठ को पुनर्निर्माण करने की तुलना में सरल हो सकता है। जब इंटरैक्शन या क्लाइंट कोड लक्षित तत्वों का निर्माण करते हैं, तो एक ब्राउज़र या रेंडरिंग सेवा उचित होती है। इस निर्णय को देखे गए प्रतिक्रियाओं से लें, न कि "आधुनिक साइट" जैसे लेबल से।
The वेब अनलॉकर उत्पाद पृष्ठ सार्वजनिक सामग्री की पुनर्प्राप्ति का वर्णन करता है जिसमें जावास्क्रिप्ट रेंडरिंग का विकल्प होता है। एक पाइथन स्क्रिप्ट लौटाए गए एचटीएमएल को ब्यूटीफुलसूप को पारित कर सकती है, लेकिन उसे पार्स करने से पहले सेवा प्रतिक्रिया और पृष्ठ मार्कर की जांच करनी चाहिए। यह मानना न करें कि प्रस्तुत आउटपुट पूर्ण है केवल इसलिए क्योंकि स्क्रिप्ट चलीं; सुस्त डेटा और पोस्ट-इंटरैक्शन दृश्य एक और प्रलेखित कदम की आवश्यकता कर सकते हैं।
साइट की पहुँच नियमों और ऑपरेशनल लोड का सम्मान करें। केवल उन पृष्ठों को पार्स करें जिन्हें आप एकत्रित करने की अनुमति रखते हैं, अनुरोधों की संख्या सीमित करें, और व्यक्तिगत डेटा को बनाए रखने से बचें जिसकी आपके आवेदन को आवश्यकता नहीं है। ये निर्णय पार्सर के चारों ओर होने चाहिए, CSS चयनकर्ता के अंदर नहीं। एक सही तकनीकी निष्कर्षण अभी भी अव्यवस्थित डेटा प्रथा हो सकती है यदि दायरा, उद्देश्य, या पृथक्करण अपरिभाषित है।
धनात्मक परीक्षणों को नेटवर्क परीक्षणों से स्वतंत्र रखें। एक छोटा सहेजा गया HTML नमूना यह स्थापित कर सकता है कि एक चयनकर्ता अपेक्षित शीर्षक को पढ़ता है और अनुपलब्ध लिंक को संभालता है। एक अलग लाइव जांच यह स्थापित कर सकती है कि वर्तमान में लौटाई गई पृष्ठ अभी भी अपेक्षित रिकॉर्ड कंटेनर को रखती है। ये परीक्षण विभिन्न प्रश्नों के उत्तर देते हैं, इसलिए एक का पास होना यह प्रमाण नहीं होना चाहिए कि दूसरा पथ काम करता है। जब एक लाइव पृष्ठ बदलता है, तो एप्लिकेशन भंडारण नियमों को बदलने से पहले इसके नए मार्कअप की तुलना सहेजे गए नमूने से करें।
निष्कर्ष
HTML को Python में पार्स करना अधिग्रहण, पेड़ निर्माण, स्कोप चयन, सामान्यीकरण और मानकीकरण की एक श्रृंखला है। पार्सर एक गलत पृष्ठ को ठीक नहीं कर सकता या लापता JavaScript को निष्पादित नहीं कर सकता। सबसे पहले यह साबित करें कि आपके पास सही प्रतिनिधित्व है, फिर प्रत्येक चयनकर्ता को एक रिकॉर्ड-स्तरीय जांच के लिए उत्तरदायी बनाएं।
पाइथन एचटीएमएल निकालने की प्रक्रिया बनाएँ
एक अनुमति प्राप्त सार्वजनिक पृष्ठ प्राप्त करें, इसकी पहचान सुनिश्चित करें, और वापस किए गए HTML को स्पष्ट चयनकर्ताओं के साथ पार्स करें।
आज ही साइन अप करें और प्राप्त करें $5 की मुफ्त क्रेडिट — कोई क्रेडिट कार्ड की आवश्यकता नहीं है.
अपने $5 क्रेडिट का दावा करें →अक्सर पूछे जाने वाले प्रश्न
क्या BeautifulSoup एक वेबपृष्ठ डाउनलोड करता है?
नहीं। BeautifulSoup उस मार्कअप को पार्स करता है जो कोई अन्य घटक प्रदान करता है। एक HTTP क्लाइंट, स्थानीय फ़ाइल, या रेंडरिंग सेवा को पहले HTML प्रदान करना आवश्यक है। पार्स ट्री बनाने से पहले उस प्रतिनिधित्व की पुष्टि करें।
मुझे ब्यूटीफुल सूप को कौन सा पार्सर देना चाहिए?
एक पार्सर का चयन सावधानी से करें और इसे प्रतिनिधि मार्कअप के खिलाफ परीक्षण करें। पाइथन का अंतर्निहित html.parser किसी अन्य पार्सर पैकेज के बिना उपलब्ध है, जबकि वैकल्पिक बैकेंड गलत HTML को विभिन्न तरीकों से व्याख्या कर सकते हैं। बैकेंड को फ़िक्स करना चयनकर्ता के व्यवहार को अधिक दोहरावदार बनाता है।
क्या पायथन बिना ब्राउज़र के एक जावास्क्रिप्ट- rendere पृष्ठ को पार्स कर सकता है?
Python अंतिम HTML को पार्स कर सकता है यदि कोई अन्य घटक इसे रेंडर कर चुका है, लेकिन एक साधारण HTTP अनुरोध और एक HTML पार्सर ब्राउज़र के JavaScript को निष्पादित नहीं करते हैं। ब्राउज़र रेंडरिंग का उपयोग करने से पहले प्रारंभिक HTML में लक्ष्य मौजूद है या एक अनुमति प्राप्त संरचित प्रतिक्रिया में यह जांचें।
मिसिंग फ़ील्ड्स को कैसे संभाला जाना चाहिए?
निर्धारित करें कि कौन से क्षेत्र आवश्यक हैं और कौन से वैकल्पिक हैं। आवश्यक मानों की कमी वाले अभिलेखों को अस्वीकार करें या चिह्नित करें, और वैकल्पिक अनुपस्थितियों का स्पष्ट रूप से प्रतिनिधित्व करें। स्वतंत्र रूप से चयनित शीर्षक और मूल्य सूचियों को ज़िप न करें, क्योंकि एक गायब मूल्य हर अगले अभिलेख को गलत संरेखित कर सकता है।
क्या किसी सार्वजनिक पृष्ठ को स्क्रैप करना हमेशा अनुमति है?
सार्वजनिक दृश्यता अनुमति, गोपनीयता, कॉपीराइट, या साइट की शर्तों को नहीं तय करती। लागू नियमों की समीक्षा करें और केवल वही डेटा एकत्र करें जिसका उपयोग आपके प्रोजेक्ट को करने की अनुमति है। अनुरोध की मात्रा को सीमित रखें और केवल उसी डेटा को बरकरार रखें जो निर्धारित उद्देश्य के लिए आवश्यक है।