अजगर वेब स्क्रैपिंग - त्वरित गाइड

वेब स्क्रैपिंग वेब से जानकारी निकालने की एक स्वचालित प्रक्रिया है। यह अध्याय आपको वेब क्रैकिंग का एक गहन विचार देगा, वेब क्रॉलिंग के साथ इसकी तुलना, और आपको वेब स्क्रैपिंग का विकल्प क्यों चुनना चाहिए। आप वेब स्क्रैपर के घटकों और काम के बारे में भी जानेंगे।

वेब स्क्रैपिंग क्या है?

शब्द 'स्क्रेपिंग' का अर्थ वेब से कुछ प्राप्त करना है। यहाँ दो प्रश्न उठते हैं: हम वेब से क्या प्राप्त कर सकते हैं और इसे कैसे प्राप्त करें।

पहले प्रश्न का उत्तर है ‘data’। डेटा किसी भी प्रोग्रामर के लिए अपरिहार्य है और हर प्रोग्रामिंग प्रोजेक्ट की बुनियादी आवश्यकता उपयोगी डेटा की बड़ी मात्रा है।

दूसरे प्रश्न का उत्तर थोड़ा मुश्किल है, क्योंकि डेटा प्राप्त करने के बहुत सारे तरीके हैं। सामान्य तौर पर, हम डेटाबेस या डेटा फ़ाइल और अन्य स्रोतों से डेटा प्राप्त कर सकते हैं। लेकिन क्या होगा अगर हमें ऑनलाइन उपलब्ध बड़ी मात्रा में डेटा की आवश्यकता है? इस तरह के डेटा को प्राप्त करने का एक तरीका मैन्युअल रूप से खोज करना (वेब ​​ब्राउज़र में दूर क्लिक करना) और आवश्यक डेटा में कॉपी-पेस्ट करना (डेटा को कॉपी-पेस्ट करना) है। यह विधि काफी थकाऊ और समय लेने वाली है। इस तरह के डेटा को प्राप्त करने का एक और तरीका हैweb scraping

Web scraping, यह भी कहा जाता है web data mining या web harvesting, एक एजेंट के निर्माण की प्रक्रिया है जो वेब से उपयोगी जानकारी को स्वचालित रूप से निकाल, पार्स, डाउनलोड और व्यवस्थित कर सकता है। दूसरे शब्दों में, हम कह सकते हैं कि वेबसाइटों से डेटा को मैन्युअल रूप से सहेजने के बजाय, वेब स्क्रैपिंग सॉफ़्टवेयर स्वचालित रूप से हमारी आवश्यकता के अनुसार कई वेबसाइटों से डेटा लोड और निकालेगा।

वेब स्क्रैपिंग की उत्पत्ति

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

वेब क्रॉलिंग v / s वेब स्क्रैपिंग

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

वेब क्रॉलिंग का उपयोग मूल रूप से बॉट्स उर्फ ​​क्रॉलर का उपयोग करके पेज पर जानकारी को इंडेक्स करने के लिए किया जाता है। इसे भी कहा जाता हैindexing। हाथ पर, वेब स्क्रैपिंग बोट्स उर्फ ​​स्क्रैपर्स का उपयोग करके जानकारी निकालने का एक स्वचालित तरीका है। इसे भी कहा जाता हैdata extraction

इन दो शब्दों के बीच के अंतर को समझने के लिए, आइए हम यहां दी गई तुलना तालिका पर गौर करें -

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

वेब स्क्रैपिंग के उपयोग

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

  • E-commerce Websites - वेब स्क्रैपर्स अपनी तुलना के लिए विभिन्न ई-कॉमर्स वेबसाइटों से एक विशेष उत्पाद की कीमत से संबंधित डेटा को विशेष रूप से एकत्र कर सकते हैं।

  • Content Aggregators - वेब स्क्रैपिंग का उपयोग व्यापक रूप से सामग्री एग्रीगेटरों द्वारा किया जाता है जैसे कि समाचार एग्रीगेटर्स और जॉब एग्रीगेटर्स अपने उपयोगकर्ताओं को अद्यतन डेटा प्रदान करने के लिए।

  • Marketing and Sales Campaigns - बिक्री और विपणन अभियानों के लिए ईमेल, फोन नंबर आदि जैसे डेटा प्राप्त करने के लिए वेब स्क्रैपर्स का उपयोग किया जा सकता है।

  • Search Engine Optimization (SEO) - वेब स्क्रैपिंग का उपयोग व्यापक रूप से एसईओ टूल्स जैसे कि SEMRush, Majestic आदि द्वारा किया जाता है।

  • Data for Machine Learning Projects - मशीन लर्निंग प्रोजेक्ट्स के लिए डेटा की पुनर्प्राप्ति वेब स्क्रैपिंग पर निर्भर करती है।

Data for Research - शोधकर्ता इस स्वचालित प्रक्रिया द्वारा अपना समय बचाकर अपने शोध कार्य के उद्देश्य के लिए उपयोगी डेटा एकत्र कर सकते हैं।

एक वेब खुरचनी के घटक

वेब स्क्रैपर में निम्नलिखित घटक होते हैं -

वेब क्रॉलर मॉड्यूल

वेब स्क्रैपर, वेब क्रॉलर मॉड्यूल का एक बहुत ही आवश्यक घटक, URL के लिए HTTP या HTTPS अनुरोध बनाकर लक्ष्य वेबसाइट को नेविगेट करने के लिए उपयोग किया जाता है। क्रॉलर अनस्ट्रक्चर्ड डेटा (HTML सामग्री) डाउनलोड करता है और इसे एक्स्ट्रेक्टर, अगले मॉड्यूल में भेजता है।

चिमटा

चिमटा भ्रूण HTML सामग्री को संसाधित करता है और डेटा को सेमीस्ट्रेक्टेड प्रारूप में निकालता है। इसे पार्सर मॉड्यूल भी कहा जाता है और इसके कामकाज के लिए नियमित अभिव्यक्ति, HTML पार्सिंग, डोम पार्सिंग या आर्टिफिशियल इंटेलिजेंस जैसी विभिन्न पार्सिंग तकनीकों का उपयोग किया जाता है।

डेटा परिवर्तन और सफाई मॉड्यूल

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

भंडारण मॉड्यूल

डेटा निकालने के बाद, हमें अपनी आवश्यकता के अनुसार इसे स्टोर करना होगा। स्टोरेज मॉड्यूल एक मानक प्रारूप में डेटा को आउटपुट करेगा जो एक डेटाबेस या JSON या CSV प्रारूप में संग्रहीत किया जा सकता है।

एक वेब खुरचनी का कार्य

वेब स्क्रैपर को कई वेब पेजों की सामग्री को डाउनलोड करने और उससे डेटा निकालने के लिए उपयोग किए जाने वाले सॉफ़्टवेयर या स्क्रिप्ट के रूप में परिभाषित किया जा सकता है।

जैसा कि ऊपर दिए गए आरेख में दिखाया गया है, हम साधारण चरणों में वेब स्क्रैपर के काम को समझ सकते हैं।

चरण 1: वेब पृष्ठों से सामग्री डाउनलोड करना

इस चरण में, एक वेब स्क्रैपर कई वेब पेजों से अनुरोधित सामग्री को डाउनलोड करेगा।

चरण 2: डेटा निकालना

वेबसाइटों पर डेटा HTML है और ज्यादातर असंरचित है। इसलिए, इस चरण में, वेब स्क्रैपर डाउनलोड की गई सामग्री से संरचित डेटा को पार्स और निकाल देगा।

चरण 3: डेटा संग्रहीत करना

यहां, एक वेब स्क्रैपर CSV, JSON या डेटाबेस में किसी भी प्रारूप में निकाले गए डेटा को स्टोर और सेव करेगा।

चरण 4: डेटा का विश्लेषण

इन सभी चरणों को सफलतापूर्वक पूरा करने के बाद, वेब स्क्रैपर इस प्रकार प्राप्त आंकड़ों का विश्लेषण करेगा।

पहले अध्याय में, हमने सीखा है कि वेब स्क्रैपिंग क्या है। इस अध्याय में, आइए देखें कि पायथन का उपयोग करके वेब स्क्रैपिंग को कैसे लागू किया जाए।

क्यों वेब स्क्रैपिंग के लिए पायथन?

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

पायथन प्रोग्रामिंग भाषा बहुत लोकप्रियता हासिल कर रही है और वे कारण जो वेब स्क्रैपिंग परियोजनाओं के लिए पायथन को एक अच्छा फिट बनाते हैं -

सिंटेक्स सादगी

अन्य प्रोग्रामिंग भाषाओं की तुलना में पायथन में सबसे सरल संरचना है। पायथन की यह विशेषता परीक्षण को आसान बनाती है और एक डेवलपर प्रोग्रामिंग पर अधिक ध्यान केंद्रित कर सकता है।

इनबिल्ट मॉड्यूल

वेब स्क्रैपिंग के लिए पायथन का उपयोग करने का एक अन्य कारण इनबिल्ट होने के साथ-साथ बाहरी उपयोगी पुस्तकालय भी हैं। हम प्रोग्रामिंग के लिए आधार के रूप में पायथन का उपयोग करके वेब स्क्रैपिंग से संबंधित कई कार्यान्वयन कर सकते हैं।

ओपन सोर्स प्रोग्रामिंग लैंग्वेज

पायथन को समुदाय से भारी समर्थन प्राप्त है क्योंकि यह एक खुला स्रोत प्रोग्रामिंग भाषा है।

आवेदनों की एक विस्तृत श्रृंखला

पायथन का उपयोग छोटे शेल स्क्रिप्ट से लेकर एंटरप्राइज़ वेब एप्लिकेशन तक विभिन्न प्रोग्रामिंग कार्यों के लिए किया जा सकता है।

अजगर की स्थापना

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

हम विभिन्न प्लेटफार्मों पर अजगर स्थापित कर सकते हैं: -

यूनिक्स और लिनक्स पर पायथन स्थापित करना

यूनिक्स / लिनक्स मशीनों पर अजगर स्थापित करने के लिए आपको नीचे दिए गए चरणों का पालन करना होगा -

Step 1 - लिंक पर जाएं https://www.python.org/downloads/

Step 2 - उपरोक्त लिंक पर यूनिक्स / लिनक्स के लिए उपलब्ध ज़िप्ड सोर्स कोड डाउनलोड करें।

Step 3 - अपने कंप्यूटर पर फ़ाइलों को निकालें।

Step 4 - इंस्टॉलेशन को पूरा करने के लिए निम्न कमांड्स का उपयोग करें -

run ./configure script
make
make install

आप पायथन को मानक स्थान पर स्थापित कर सकते हैं /usr/local/bin और इसके पुस्तकालयों /usr/local/lib/pythonXX, जहां XX पायथन का संस्करण है।

विंडोज पर पायथन स्थापित करना

विंडोज मशीनों पर अजगर स्थापित करने के लिए आपको नीचे दिए गए चरणों का पालन करने की आवश्यकता है -

Step 1 - लिंक पर जाएं https://www.python.org/downloads/

Step 2 - विंडोज इंस्टॉलर डाउनलोड करें python-XYZ.msi फ़ाइल, जहाँ XYZ वह संस्करण है जिसे हमें इंस्टॉल करना है।

Step 3 - अब, इंस्टॉलर फाइल को अपनी लोकल मशीन में सेव करें और MSI फाइल को रन करें।

Step 4 - आखिर में, पायथन इंस्टाल विजार्ड को लाने के लिए डाउनलोड की गई फ़ाइल को चलाएं।

Macintosh पर पायथन स्थापित करना

हमें अवश्य उपयोग करना चाहिए Homebrew मैक ओएस एक्स पर पायथन 3 स्थापित करने के लिए। होमब्रे को स्थापित करना आसान है और एक शानदार पैकेज इंस्टॉलर है।

होमब्रे को निम्नलिखित कमांड का उपयोग करके भी स्थापित किया जा सकता है -

$ ruby -e "$(curl -fsSL
https://raw.githubusercontent.com/Homebrew/install/master/install)"

पैकेज मैनेजर को अपडेट करने के लिए, हम निम्नलिखित कमांड का उपयोग कर सकते हैं -

$ brew update

निम्नलिखित कमांड की मदद से हम Python3 को अपने MAC मशीन पर स्थापित कर सकते हैं -

$ brew install python3

पथ की स्थापना

आप विभिन्न वातावरणों पर पथ स्थापित करने के लिए निम्नलिखित निर्देशों का उपयोग कर सकते हैं -

यूनिक्स / लिनक्स पर पथ की स्थापना

विभिन्न कमांड शेल का उपयोग करके पथ सेट करने के लिए निम्न कमांड का उपयोग करें -

Csh शेल के लिए

setenv PATH "$PATH:/usr/local/bin/python".

बैश शेल (लिनक्स) के लिए

ATH="$PATH:/usr/local/bin/python".

Sh या ksh शेल के लिए

PATH="$PATH:/usr/local/bin/python".

विंडोज पर पथ की स्थापना

विंडोज पर पथ सेट करने के लिए, हम पथ का उपयोग कर सकते हैं %path%;C:\Python कमांड प्रॉम्प्ट पर और फिर एंटर दबाएं।

पायथन चला रहा है

हम पायथन को निम्नलिखित तीन तरीकों में से किसी का उपयोग करके शुरू कर सकते हैं -

इंटरएक्टिव दुभाषिया

एक ऑपरेटिंग सिस्टम जैसे UNIX और DOS जो एक कमांड-लाइन दुभाषिया या शेल प्रदान कर रहा है, जिसका उपयोग पायथन शुरू करने के लिए किया जा सकता है।

हम इंटरैक्टिव दुभाषिया में कोडिंग शुरू कर सकते हैं -

Step 1 - दर्ज करें python कमांड लाइन पर।

Step 2 - फिर, हम इंटरैक्टिव दुभाषिया में तुरंत कोडिंग शुरू कर सकते हैं।

$python # Unix/Linux
or
python% # Unix/Linux
or
C:> python # Windows/DOS

कमांड-लाइन से स्क्रिप्ट

हम दुभाषिया को आमंत्रित करके कमांड लाइन पर पायथन स्क्रिप्ट निष्पादित कर सकते हैं। इसे इस प्रकार समझा जा सकता है -

$python script.py # Unix/Linux
or
python% script.py # Unix/Linux
or
C: >python script.py # Windows/DOS

समन्वित विकास पर्यावरण

हम GUI पर्यावरण से पायथन भी चला सकते हैं यदि सिस्टम में GUI अनुप्रयोग है जो पायथन का समर्थन कर रहा है। विभिन्न प्लेटफार्मों पर अजगर का समर्थन करने वाले कुछ आईडीई नीचे दिए गए हैं -

IDE for UNIX - UNIX, Python के लिए, IDLE IDE है।

IDE for Windows - विंडोज में PythonWin IDE है जिसमें GUI भी है।

IDE for Macintosh - Macintosh में IDLE IDE है जो मुख्य वेबसाइट से MacBinary या BinHex'd फाइलों के रूप में डाउनलोड करने योग्य है।

इस अध्याय में, हम विभिन्न पायथन मॉड्यूल सीखते हैं जिनका उपयोग हम वेब स्क्रैपिंग के लिए कर सकते हैं।

Virtualenv का उपयोग करके पायथन विकास वातावरण

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

स्थापित करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं virtualenv -

(base) D:\ProgramData>pip install virtualenv
Collecting virtualenv
   Downloading
https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c3
5d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl
(1.9MB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 1.9MB 86kB/s
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0

अब, हमें एक निर्देशिका बनाने की आवश्यकता है जो निम्नलिखित कमांड की मदद से परियोजना का प्रतिनिधित्व करेगी -

(base) D:\ProgramData>mkdir webscrap

अब, निम्नलिखित कमांड की सहायता से उस निर्देशिका में प्रवेश करें -

(base) D:\ProgramData>cd webscrap

अब, हमें अपनी पसंद के आभासी पर्यावरण फोल्डर को इनिशियलाइज़ करने की आवश्यकता है -

(base) D:\ProgramData\webscrap>virtualenv websc
Using base prefix 'd:\\programdata'
New python executable in D:\ProgramData\webscrap\websc\Scripts\python.exe
Installing setuptools, pip, wheel...done.

अब, नीचे दिए गए आदेश के साथ आभासी वातावरण को सक्रिय करें। एक बार सफलतापूर्वक सक्रिय हो जाने के बाद, आप इसका नाम बायीं ओर कोष्ठक में देखेंगे।

(base) D:\ProgramData\webscrap>websc\scripts\activate

हम इस प्रकार इस वातावरण में कोई भी मॉड्यूल स्थापित कर सकते हैं -

(websc) (base) D:\ProgramData\webscrap>pip install requests
Collecting requests
   Downloading
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl (9
1kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 148kB/s
Collecting chardet<3.1.0,>=3.0.2 (from requests)
   Downloading
https://files.pythonhosted.org/packages/bc/a9/01ffebfb562e4274b6487b4bb1ddec7ca
55ec7510b22e4c51f14098443b8/chardet-3.0.4-py2.py3-none-any.whl (133
kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 369kB/s
Collecting certifi>=2017.4.17 (from requests)
   Downloading
https://files.pythonhosted.org/packages/df/f7/04fee6ac349e915b82171f8e23cee6364
4d83663b34c539f7a09aed18f9e/certifi-2018.8.24-py2.py3-none-any.whl
(147kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 153kB 527kB/s
Collecting urllib3<1.24,>=1.21.1 (from requests)
   Downloading
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl (133k
B)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 143kB 517kB/s
Collecting idna<2.8,>=2.5 (from requests)
   Downloading
https://files.pythonhosted.org/packages/4b/2a/0276479a4b3caeb8a8c1af2f8e4355746
a97fab05a372e4a2c6a6b876165/idna-2.7-py2.py3-none-any.whl (58kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 61kB 339kB/s
Installing collected packages: chardet, certifi, urllib3, idna, requests
Successfully installed certifi-2018.8.24 chardet-3.0.4 idna-2.7 requests-2.19.1
urllib3-1.23

आभासी वातावरण को निष्क्रिय करने के लिए, हम निम्नलिखित कमांड का उपयोग कर सकते हैं -

(websc) (base) D:\ProgramData\webscrap>deactivate
(base) D:\ProgramData\webscrap>

आप देख सकते हैं कि (websc) निष्क्रिय कर दिया गया है।

वेब स्क्रैपिंग के लिए पायथन मॉड्यूल

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

इस खंड में, हम वेब स्क्रैपिंग के लिए उपयोगी पायथन पुस्तकालयों के बारे में चर्चा करने जा रहे हैं।

अनुरोध

यह एक साधारण अजगर वेब स्क्रैपिंग लाइब्रेरी है। यह वेब पृष्ठों तक पहुँचने के लिए उपयोग की जाने वाली एक कुशल HTTP लाइब्रेरी है। की मदद सेRequests, हम वेब पेजों के कच्चे HTML प्राप्त कर सकते हैं जो तब डेटा पुनर्प्राप्त करने के लिए पार्स किया जा सकता है। उपयोग करने से पहलेrequestsआइए हम इसकी स्थापना को समझते हैं।

अनुरोध स्थापित करना

हम इसे अपने आभासी वातावरण या वैश्विक स्थापना पर स्थापित कर सकते हैं। की मदद सेpip कमांड, हम इसे निम्नानुसार आसानी से स्थापित कर सकते हैं -

(base) D:\ProgramData> pip install requests
Collecting requests
Using cached
https://files.pythonhosted.org/packages/65/47/7e02164a2a3db50ed6d8a6ab1d6d60b69
c4c3fdf57a284257925dfc12bda/requests-2.19.1-py2.py3-none-any.whl
Requirement already satisfied: idna<2.8,>=2.5 in d:\programdata\lib\sitepackages
(from requests) (2.6)
Requirement already satisfied: urllib3<1.24,>=1.21.1 in
d:\programdata\lib\site-packages (from requests) (1.22)
Requirement already satisfied: certifi>=2017.4.17 in d:\programdata\lib\sitepackages
(from requests) (2018.1.18)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in
d:\programdata\lib\site-packages (from requests) (3.0.4)
Installing collected packages: requests
Successfully installed requests-2.19.1

उदाहरण

इस उदाहरण में, हम एक वेब पेज के लिए GET HTTP अनुरोध कर रहे हैं। इसके लिए हमें पहले पुस्तकालय के आयात का अनुरोध इस प्रकार करना होगा -

In [1]: import requests

इस कोड की निम्नलिखित पंक्ति में, हम url के लिए GET HTTP अनुरोध करने के लिए अनुरोधों का उपयोग करते हैं: https://authoraditiagarwal.com/ GET अनुरोध करके।

In [2]: r = requests.get('https://authoraditiagarwal.com/')

अब हम सामग्री का उपयोग करके पुनः प्राप्त कर सकते हैं .text संपत्ति इस प्रकार है -

In [5]: r.text[:200]

ध्यान दें कि निम्नलिखित आउटपुट में, हमें पहले 200 अक्षर मिले।

Out[5]: '<!DOCTYPE html>\n<html lang="en-US"\n\titemscope
\n\titemtype="http://schema.org/WebSite" \n\tprefix="og: http://ogp.me/ns#"
>\n<head>\n\t<meta charset
="UTF-8" />\n\t<meta http-equiv="X-UA-Compatible" content="IE'

Urllib3

यह एक और पायथन लाइब्रेरी है जिसका उपयोग URL के समान डेटा को पुनः प्राप्त करने के लिए किया जा सकता है requestsपुस्तकालय। आप इसके तकनीकी प्रलेखन में इस पर अधिक पढ़ सकते हैंhttps://urllib3.readthedocs.io/en/latest/।

Urllib3 स्थापित करना

का उपयोग करते हुए pip कमांड, हम स्थापित कर सकते हैं urllib3 या तो हमारे आभासी वातावरण में या वैश्विक स्थापना में।

(base) D:\ProgramData>pip install urllib3
Collecting urllib3
Using cached
https://files.pythonhosted.org/packages/bd/c9/6fdd990019071a4a32a5e7cb78a1d92c5
3851ef4f56f62a3486e6a7d8ffb/urllib3-1.23-py2.py3-none-any.whl
Installing collected packages: urllib3
Successfully installed urllib3-1.23

उदाहरण: Urllib3 और BeautifulSoup का उपयोग करके स्क्रैप करना

निम्नलिखित उदाहरण में, हम वेब पेज का उपयोग करके स्क्रैप कर रहे हैं Urllib3 तथा BeautifulSoup। हम प्रयोग कर रहे हैंUrllib3वेब पेज से कच्चे डेटा (HTML) प्राप्त करने के लिए अनुरोध पुस्तकालय के स्थान पर। तब हम उपयोग कर रहे हैंBeautifulSoup उस HTML डेटा को पार्स करने के लिए।

import urllib3
from bs4 import BeautifulSoup
http = urllib3.PoolManager()
r = http.request('GET', 'https://authoraditiagarwal.com')
soup = BeautifulSoup(r.data, 'lxml')
print (soup.title)
print (soup.title.text)

जब आप यह कोड चलाते हैं तो यह आउटपुट होता है -

<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal

सेलेनियम

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

सेलेनियम पायथन बाइंडिंग फ़ायरफ़ॉक्स, IE, क्रोम, रिमोट आदि जैसे सेलेनियम वेबड्राइवर्स का उपयोग करने के लिए एक सुविधाजनक एपीआई प्रदान करता है। वर्तमान समर्थित पायथन संस्करण 2.7, 3.5 और इसके बाद के संस्करण हैं।

सेलेनियम स्थापित करना

का उपयोग करते हुए pip कमांड, हम स्थापित कर सकते हैं urllib3 या तो हमारे आभासी वातावरण में या वैश्विक स्थापना में।

pip install selenium

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

Chrome

https://sites.google.com/a/chromium.org/

Edge

https://developer.microsoft.com/

Firefox

https://github.com/

Safari

https://webkit.org/

उदाहरण

यह उदाहरण सेलेनियम का उपयोग करके वेब स्क्रैपिंग दिखाता है। इसका उपयोग परीक्षण के लिए भी किया जा सकता है जिसे सेलेनियम परीक्षण कहा जाता है।

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

सबसे पहले, आयात करने की आवश्यकता है webdriver सेलेनियम से निम्नानुसार है -

from selenium import webdriver

अब, वेब ड्राइवर का पथ प्रदान करें जिसे हमने अपनी आवश्यकता के अनुसार डाउनलोड किया है -

path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)

अब, url प्रदान करें जिसे हम उस वेब ब्राउज़र में खोलना चाहते हैं जिसे अब हमारे पाइथन स्क्रिप्ट द्वारा नियंत्रित किया गया है।

browser.get('https://authoraditiagarwal.com/leadershipmanagement')

हम xpath को lxml में प्रदान करके एक विशेष तत्व को परिमार्जन भी कर सकते हैं।

browser.find_element_by_xpath('/html/body').click()

आउटपुट के लिए आप पायथन स्क्रिप्ट द्वारा नियंत्रित ब्राउज़र की जांच कर सकते हैं।

Scrapy

स्क्रेपी पाइथन में लिखा गया एक तेज़, ओपन-सोर्स वेब क्रॉलिंग फ्रेमवर्क है, जिसका उपयोग वेब पेज से एक्सपीथ पर आधारित चयनकर्ताओं की मदद से डेटा निकालने के लिए किया जाता है। स्क्रेपी पहली बार 26 जून, 2008 को बीएसडी के तहत लाइसेंस प्राप्त किया गया था, जून 2015 में एक मील का पत्थर 1.0 जारी किया गया था। यह हमें उन सभी उपकरणों को प्रदान करता है जिन्हें हमें वेबसाइटों से डेटा निकालने, संसाधित करने और संरचना करने की आवश्यकता होती है।

स्क्रेपी स्थापित करना

का उपयोग करते हुए pip कमांड, हम स्थापित कर सकते हैं urllib3 या तो हमारे आभासी वातावरण में या वैश्विक स्थापना में।

pip install scrapy

Scrapy के अधिक विस्तार से अध्ययन के लिए आप लिंक Scrapy पर जा सकते हैं

पायथन के साथ, हम किसी भी वेबसाइट या वेब पेज के विशेष तत्वों को परिमार्जन कर सकते हैं लेकिन क्या आपको इस बात का कोई अंदाजा है कि यह कानूनी है या नहीं? किसी भी वेबसाइट को स्क्रैप करने से पहले हमें वेब स्क्रैपिंग की वैधता के बारे में जानना होगा। यह अध्याय वेब स्क्रैपिंग की वैधता से संबंधित अवधारणाओं की व्याख्या करेगा।

परिचय

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

स्क्रैपिंग से पहले आवश्यक अनुसंधान

यदि आप इससे डेटा खुरचने के लिए किसी वेबसाइट को लक्षित कर रहे हैं, तो हमें इसके पैमाने और संरचना को समझने की आवश्यकता है। निम्नलिखित कुछ फाइलें हैं जिन्हें वेब स्क्रैपिंग शुरू करने से पहले हमें विश्लेषण करने की आवश्यकता है।

Robots.txt का विश्लेषण करना

वास्तव में अधिकांश प्रकाशक प्रोग्रामर को कुछ हद तक अपनी वेबसाइटों को क्रॉल करने की अनुमति देते हैं। दूसरे अर्थ में, प्रकाशक चाहते हैं कि वेबसाइटों के विशिष्ट भाग क्रॉल किए जाएं। इसे परिभाषित करने के लिए, वेबसाइटों को यह बताने के लिए कुछ नियम रखने होंगे कि कौन से हिस्से क्रॉल किए जा सकते हैं और कौन से नहीं। ऐसे नियमों को एक फ़ाइल में परिभाषित किया गया हैrobots.txt

robots.txtमानव पठनीय फ़ाइल का उपयोग वेबसाइट के उन हिस्सों की पहचान करने के लिए किया जाता है जिन्हें क्रॉलर को अनुमति दी जाती है और साथ ही उसे परिमार्जन करने की अनुमति नहीं होती है। Robots.txt फ़ाइल का कोई मानक प्रारूप नहीं है और वेबसाइट के प्रकाशक अपनी आवश्यकताओं के अनुसार संशोधन कर सकते हैं। हम उस वेबसाइट के url के बाद स्लैश और robots.txt प्रदान करके किसी विशेष वेबसाइट के लिए robots.txt फ़ाइल की जांच कर सकते हैं। उदाहरण के लिए, यदि हम इसे Google.com के लिए जांचना चाहते हैं, तो हमें टाइप करना होगाhttps://www.google.com/robots.txt और हमें कुछ इस प्रकार मिलेगा -

User-agent: *
Disallow: /search
Allow: /search/about
Allow: /search/static
Allow: /search/howsearchworks
Disallow: /sdch
Disallow: /groups
Disallow: /index.html?
Disallow: /?
Allow: /?hl=
Disallow: /?hl=*&
Allow: /?hl=*&gws_rd=ssl$
and so on……..

कुछ सामान्य नियम जो किसी वेबसाइट के robots.txt फ़ाइल में परिभाषित किए गए हैं वे इस प्रकार हैं -

User-agent: BadCrawler
Disallow: /

उपरोक्त नियम का अर्थ है कि robots.txt फ़ाइल क्रॉलर से पूछती है BadCrawler उपयोगकर्ता एजेंट अपनी वेबसाइट को क्रॉल करने के लिए नहीं।

User-agent: *
Crawl-delay: 5
Disallow: /trap

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

साइटमैप फ़ाइलों का विश्लेषण

यदि आप अद्यतन जानकारी के लिए किसी वेबसाइट को क्रॉल करना चाहते हैं तो आपको क्या करना चाहिए? आप उस अद्यतन जानकारी को प्राप्त करने के लिए हर वेब पेज को क्रॉल करेंगे, लेकिन इससे उस विशेष वेबसाइट के सर्वर ट्रैफ़िक में वृद्धि होगी। यही कारण है कि वेबसाइटें क्रॉलरों को हर वेब पेज को क्रॉल करने की आवश्यकता के बिना अपडेट करने वाली सामग्री का पता लगाने के लिए साइटमैप फाइलें प्रदान करती हैं। साइटमैप मानक पर परिभाषित किया गया हैhttp://www.sitemaps.org/protocol.html।

साइटमैप फ़ाइल की सामग्री

निम्नलिखित साइटमैप फ़ाइल की सामग्री है https://www.microsoft.com/robots.txt जो कि robots.txt फ़ाइल में खोजा गया है -

Sitemap: https://www.microsoft.com/en-us/explore/msft_sitemap_index.xml
Sitemap: https://www.microsoft.com/learning/sitemap.xml
Sitemap: https://www.microsoft.com/en-us/licensing/sitemap.xml
Sitemap: https://www.microsoft.com/en-us/legal/sitemap.xml
Sitemap: https://www.microsoft.com/filedata/sitemaps/RW5xN8
Sitemap: https://www.microsoft.com/store/collections.xml
Sitemap: https://www.microsoft.com/store/productdetailpages.index.xml
Sitemap: https://www.microsoft.com/en-us/store/locations/store-locationssitemap.xml

उपरोक्त सामग्री से पता चलता है कि साइटमैप वेबसाइट पर URL को सूचीबद्ध करता है और आगे एक वेबमास्टर को अंतिम अद्यतन तिथि, सामग्री के परिवर्तन, URL के संबंध में URL के महत्व और प्रत्येक URL के बारे में आदि जैसी कुछ अतिरिक्त जानकारी निर्दिष्ट करने की अनुमति देता है।

वेबसाइट का आकार क्या है?

क्या एक वेबसाइट का आकार, यानी एक वेबसाइट के वेब पेजों की संख्या हमारे क्रॉल करने के तरीके को प्रभावित करती है? निश्चित रूप से हां। क्योंकि यदि हमारे पास क्रॉल करने के लिए वेब पेजों की संख्या कम है, तो दक्षता एक गंभीर मुद्दा नहीं होगा, लेकिन मान लीजिए कि अगर हमारी वेबसाइट में लाखों वेब पेज हैं, उदाहरण के लिए Microsoft.com, तो प्रत्येक वेब पेज को क्रमिक रूप से डाउनलोड करने में कई महीने लगेंगे और तब दक्षता एक गंभीर चिंता का विषय होगा।

वेबसाइट के आकार की जाँच करना

Google के क्रॉलर के परिणाम के आकार की जाँच करके, हम एक वेबसाइट के आकार का अनुमान लगा सकते हैं। कीवर्ड का उपयोग करके हमारे परिणाम को फ़िल्टर किया जा सकता हैsiteGoogle खोज करते समय। उदाहरण के लिए, के आकार का अनुमान लगानाhttps://authoraditiagarwal.com/ नीचे दिया गया है -

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

वेबसाइट किस तकनीक का उपयोग करती है?

एक और महत्वपूर्ण सवाल यह है कि क्या वेबसाइट द्वारा उपयोग की जाने वाली तकनीक हमारे क्रॉल करने के तरीके को प्रभावित करती है? हाँ, यह प्रभावित करता है। लेकिन हम एक वेबसाइट द्वारा उपयोग की जाने वाली तकनीक के बारे में कैसे जांच कर सकते हैं? एक पायथन लाइब्रेरी है जिसका नाम हैbuiltwith जिसकी मदद से हम किसी वेबसाइट द्वारा इस्तेमाल की जाने वाली तकनीक के बारे में पता लगा सकते हैं।

उदाहरण

इस उदाहरण में हम वेबसाइट द्वारा उपयोग की जाने वाली तकनीक की जांच करने जा रहे हैं https://authoraditiagarwal.com अजगर पुस्तकालय की मदद से builtwith। लेकिन इस पुस्तकालय का उपयोग करने से पहले, हमें इसे निम्नानुसार स्थापित करना होगा -

(base) D:\ProgramData>pip install builtwith
Collecting builtwith
   Downloading
https://files.pythonhosted.org/packages/9b/b8/4a320be83bb3c9c1b3ac3f9469a5d66e0
2918e20d226aa97a3e86bddd130/builtwith-1.3.3.tar.gz
Requirement already satisfied: six in d:\programdata\lib\site-packages (from
builtwith) (1.10.0)
Building wheels for collected packages: builtwith
   Running setup.py bdist_wheel for builtwith ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\2b\00\c2\a96241e7fe520e75093898b
f926764a924873e0304f10b2524
Successfully built builtwith
Installing collected packages: builtwith
Successfully installed builtwith-1.3.3

अब, कोड की सरल रेखा का पालन करने की मदद से हम किसी विशेष वेबसाइट द्वारा उपयोग की जाने वाली तकनीक की जांच कर सकते हैं -

In [1]: import builtwith
In [2]: builtwith.parse('http://authoraditiagarwal.com')
Out[2]:
{'blogs': ['PHP', 'WordPress'],
   'cms': ['WordPress'],
   'ecommerce': ['WooCommerce'],
   'font-scripts': ['Font Awesome'],
   'javascript-frameworks': ['jQuery'],
   'programming-languages': ['PHP'],
   'web-servers': ['Apache']}

वेबसाइट का मालिक कौन है?

वेबसाइट का स्वामी इसलिए भी मायने रखता है क्योंकि यदि मालिक को क्रॉलर को अवरुद्ध करने के लिए जाना जाता है, तो वेबसाइट पर डेटा को स्क्रैप करते समय क्रॉलर को सावधान रहना चाहिए। नाम का एक प्रोटोकॉल हैWhois जिसकी मदद से हम वेबसाइट के मालिक के बारे में पता लगा सकते हैं।

उदाहरण

इस उदाहरण में हम वेबसाइट के मालिक की जाँच करने जा रहे हैं जो microsoft.com को Whois की सहायता से कहते हैं । लेकिन इस पुस्तकालय का उपयोग करने से पहले, हमें इसे निम्नानुसार स्थापित करना होगा -

(base) D:\ProgramData>pip install python-whois
Collecting python-whois
   Downloading
https://files.pythonhosted.org/packages/63/8a/8ed58b8b28b6200ce1cdfe4e4f3bbc8b8
5a79eef2aa615ec2fef511b3d68/python-whois-0.7.0.tar.gz (82kB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 92kB 164kB/s
Requirement already satisfied: future in d:\programdata\lib\site-packages (from
python-whois) (0.16.0)
Building wheels for collected packages: python-whois
   Running setup.py bdist_wheel for python-whois ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\06\cb\7d\33704632b0e1bb64460dc2b
4dcc81ab212a3d5e52ab32dc531
Successfully built python-whois
Installing collected packages: python-whois
Successfully installed python-whois-0.7.0

अब, कोड की सरल रेखा का पालन करने की मदद से हम किसी विशेष वेबसाइट द्वारा उपयोग की जाने वाली तकनीक की जांच कर सकते हैं -

In [1]: import whois
In [2]: print (whois.whois('microsoft.com'))
{
   "domain_name": [
      "MICROSOFT.COM",
      "microsoft.com"
   ],
   -------
   "name_servers": [
      "NS1.MSFT.NET",
      "NS2.MSFT.NET",
      "NS3.MSFT.NET",
      "NS4.MSFT.NET",
      "ns3.msft.net",
      "ns1.msft.net",
      "ns4.msft.net",
      "ns2.msft.net"
   ],
   "emails": [
      "[email protected]",
      "[email protected]",
      "[email protected]",
      "[email protected]"
   ],
}

एक वेब पेज का विश्लेषण करने का मतलब है कि इसके संसेचन को समझना। अब, सवाल उठता है कि वेब स्क्रैपिंग के लिए यह महत्वपूर्ण क्यों है? इस अध्याय में, हम इसे विस्तार से समझते हैं।

वेब पेज विश्लेषण

वेब पेज विश्लेषण महत्वपूर्ण है क्योंकि विश्लेषण किए बिना हम यह नहीं जान पा रहे हैं कि निष्कर्षण के बाद हम उस वेब पेज से किस रूप में (संरचित या असंरचित) डेटा प्राप्त करने जा रहे हैं। हम निम्नलिखित तरीकों से वेब पेज विश्लेषण कर सकते हैं -

पृष्ठ स्रोत देखना

यह समझने का एक तरीका है कि किसी वेब पेज को उसके स्रोत कोड की जांच करके कैसे संरचित किया जाता है। इसे लागू करने के लिए, हमें पृष्ठ पर राइट क्लिक करना होगा और फिर चयन करना होगाView page sourceविकल्प। फिर, हम HTML के रूप में उस वेब पेज से अपनी रुचि का डेटा प्राप्त करेंगे। लेकिन मुख्य चिंता व्हाट्सएप और फॉर्मेटिंग के बारे में है जिसे प्रारूपित करना हमारे लिए मुश्किल है।

निरीक्षण तत्व विकल्प पर क्लिक करके पृष्ठ स्रोत का निरीक्षण

यह वेब पेज का विश्लेषण करने का एक और तरीका है। लेकिन अंतर यह है कि यह वेब पेज के स्रोत कोड में स्वरूपण और व्हाट्सएप के मुद्दे को हल करेगा। आप इसे राइट क्लिक करके और फिर चयन करके लागू कर सकते हैंInspect या Inspect elementमेनू से विकल्प। यह उस वेब पेज के विशेष क्षेत्र या तत्व के बारे में जानकारी प्रदान करेगा।

वेब पेज से डेटा निकालने के विभिन्न तरीके

वेब पेज से डेटा निकालने के लिए निम्नलिखित विधियों का उपयोग किया जाता है -

नियमित अभिव्यक्ति

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

यदि आप सामान्य रूप से नियमित अभिव्यक्ति के बारे में अधिक जानना चाहते हैं, तो लिंक पर जाएं https://www.tutorialspoint.com/automata_theory/regular_expressions.htmऔर यदि आप पायथन में पुनः मॉड्यूल या नियमित अभिव्यक्ति के बारे में अधिक जानना चाहते हैं, तो आप https://www.tutorialspoint.com/python/python_reg_expressions.htm लिंक का अनुसरण कर सकते हैं ।

उदाहरण

निम्नलिखित उदाहरण में, हम भारत के बारे में डेटा को परिमार्जन करने जा रहे हैं http://example.webscraping.com नियमित अभिव्यक्ति की मदद से <td> की सामग्री के मिलान के बाद।

import re
import urllib.request
response =
   urllib.request.urlopen('http://example.webscraping.com/places/default/view/India-102')
html = response.read()
text = html.decode()
re.findall('<td class="w2p_fw">(.*?)</td>',text)

उत्पादन

इसी आउटपुट को यहाँ दिखाया जाएगा -

[
   '<img src="/places/static/images/flags/in.png" />',
   '3,287,590 square kilometres',
   '1,173,108,018',
   'IN',
   'India',
   'New Delhi',
   '<a href="/places/default/continent/AS">AS</a>',
   '.in',
   'INR',
   'Rupee',
   '91',
   '######',
   '^(\\d{6})$',
   'enIN,hi,bn,te,mr,ta,ur,gu,kn,ml,or,pa,as,bh,sat,ks,ne,sd,kok,doi,mni,sit,sa,fr,lus,inc',
   '<div>
      <a href="/places/default/iso/CN">CN </a>
      <a href="/places/default/iso/NP">NP </a>
      <a href="/places/default/iso/MM">MM </a>
      <a href="/places/default/iso/BT">BT </a>
      <a href="/places/default/iso/PK">PK </a>
      <a href="/places/default/iso/BD">BD </a>
   </div>'
]

निरीक्षण करें कि उपरोक्त आउटपुट में आप नियमित अभिव्यक्ति का उपयोग करके देश भारत के बारे में विवरण देख सकते हैं।

सुंदर सूप

मान लीजिए कि हम सभी हाइपरलिंक्स को एक वेब पेज से इकट्ठा करना चाहते हैं, तो हम सुंदरसर नामक एक पार्सर का उपयोग कर सकते हैं, जिसे अधिक विवरण में जाना जा सकता है https://www.crummy.com/software/BeautifulSoup/bs4/doc/.सरल शब्दों में, ब्यूटीफुलसप HTML और एक्सएमएल फाइलों से डेटा खींचने के लिए पायथन लाइब्रेरी है। इसका उपयोग अनुरोधों के साथ किया जा सकता है, क्योंकि इसमें सूप ऑब्जेक्ट बनाने के लिए एक इनपुट (डॉक्यूमेंट या यूआरएल) की जरूरत होती है, जो अपने आप में एक वेब पेज नहीं ला सकता है। वेब पेज और हाइपरलिंक के शीर्षक को इकट्ठा करने के लिए आप निम्नलिखित पायथन लिपि का उपयोग कर सकते हैं।

सुंदर सूप स्थापित करना

का उपयोग करते हुए pip कमांड, हम स्थापित कर सकते हैं beautifulsoup या तो हमारे आभासी वातावरण में या वैश्विक स्थापना में।

(base) D:\ProgramData>pip install bs4
Collecting bs4
   Downloading
https://files.pythonhosted.org/packages/10/ed/7e8b97591f6f456174139ec089c769f89
a94a1a4025fe967691de971f314/bs4-0.0.1.tar.gz
Requirement already satisfied: beautifulsoup4 in d:\programdata\lib\sitepackages
(from bs4) (4.6.0)
Building wheels for collected packages: bs4
   Running setup.py bdist_wheel for bs4 ... done
   Stored in directory:
C:\Users\gaurav\AppData\Local\pip\Cache\wheels\a0\b0\b2\4f80b9456b87abedbc0bf2d
52235414c3467d8889be38dd472
Successfully built bs4
Installing collected packages: bs4
Successfully installed bs4-0.0.1

उदाहरण

ध्यान दें कि इस उदाहरण में, हम उपरोक्त उदाहरण को अनुरोध के साथ लागू कर रहे हैं जो अजगर मॉड्यूल है। हम प्रयोग कर रहे हैंr.text एक सूप ऑब्जेक्ट बनाने के लिए जिसका उपयोग वेबपेज के शीर्षक जैसे विवरण लाने के लिए किया जाएगा।

सबसे पहले, हमें आवश्यक पायथन मॉड्यूल आयात करने की आवश्यकता है -

import requests
from bs4 import BeautifulSoup

इस कोड की निम्नलिखित पंक्ति में हम url के लिए GET HTTP अनुरोध बनाने के लिए अनुरोधों का उपयोग करते हैं: https://authoraditiagarwal.com/ GET अनुरोध करके।

r = requests.get('https://authoraditiagarwal.com/')

अब हमें निम्नानुसार सूप वस्तु बनाने की आवश्यकता है -

soup = BeautifulSoup(r.text, 'lxml')
print (soup.title)
print (soup.title.text)

उत्पादन

इसी आउटपुट को यहाँ दिखाया जाएगा -

<title>Learn and Grow with Aditi Agarwal</title>
Learn and Grow with Aditi Agarwal

lxml

एक और पायथन लाइब्रेरी जो हम वेब स्क्रैपिंग के लिए चर्चा करने जा रहे हैं वह है lxml। यह एक हाईपरफॉर्मेंस HTML और XML पार्सिंग लाइब्रेरी है। यह तुलनात्मक रूप से तेज और सीधा है। आप इसके बारे में और अधिक पढ़ सकते हैंhttps://lxml.de/.

Lxml स्थापित करना

पाइप कमांड का उपयोग करके, हम स्थापित कर सकते हैं lxml या तो हमारे आभासी वातावरण में या वैश्विक स्थापना में।

(base) D:\ProgramData>pip install lxml
Collecting lxml
   Downloading
https://files.pythonhosted.org/packages/b9/55/bcc78c70e8ba30f51b5495eb0e
3e949aa06e4a2de55b3de53dc9fa9653fa/lxml-4.2.5-cp36-cp36m-win_amd64.whl
(3.
6MB)
   100% |¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 3.6MB 64kB/s
Installing collected packages: lxml
Successfully installed lxml-4.2.5

उदाहरण: lxml और अनुरोधों का उपयोग करके डेटा निष्कर्षण

निम्नलिखित उदाहरण में, हम वेब पेज के एक विशेष तत्व को स्क्रैप कर रहे हैं authoraditiagarwal.com lxml और अनुरोधों का उपयोग करके -

सबसे पहले, हमें अनुरोध और HTML को lxml लाइब्रेरी से आयात करने की आवश्यकता है -

import requests
from lxml import html

अब हमें स्क्रैप करने के लिए वेब पेज का url प्रदान करना होगा

url = 'https://authoraditiagarwal.com/leadershipmanagement/'

अब हमें रास्ता प्रदान करने की आवश्यकता है (Xpath) उस वेब पेज के विशेष तत्व के लिए -

path = '//*[@id="panel-836-0-0-1"]/div/div/p[1]'
response = requests.get(url)
byte_string = response.content
source_code = html.fromstring(byte_string)
tree = source_code.xpath(path)
print(tree[0].text_content())

उत्पादन

इसी आउटपुट को यहाँ दिखाया जाएगा -

The Sprint Burndown or the Iteration Burndown chart is a powerful tool to communicate
daily progress to the stakeholders. It tracks the completion of work for a given sprint
or an iteration. The horizontal axis represents the days within a Sprint. The vertical 
axis represents the hours remaining to complete the committed work.

पहले के अध्यायों में, हमने विभिन्न पायथन मॉड्यूल द्वारा वेब पेज या वेब स्क्रैपिंग से डेटा निकालने के बारे में सीखा। इस अध्याय में, डेटा को स्क्रैप करने के लिए विभिन्न तकनीकों पर ध्यान दें।

परिचय

स्क्रैप किए गए डेटा को संसाधित करने के लिए, हमें अपने स्थानीय मशीन पर स्प्रेडशीट (CSV), JSON या कभी-कभी MySQL जैसे डेटाबेस में किसी विशेष प्रारूप में डेटा संग्रहीत करना चाहिए।

CSV और JSON डाटा प्रोसेसिंग

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

सबसे पहले, हमें आवश्यक अजगर पुस्तकालयों को निम्नानुसार आयात करना होगा -

import requests
from bs4 import BeautifulSoup
import csv

इस कोड की निम्नलिखित पंक्ति में, हम url के लिए GET HTTP अनुरोध करने के लिए अनुरोधों का उपयोग करते हैं: https://authoraditiagarwal.com/ GET अनुरोध करके।

r = requests.get('https://authoraditiagarwal.com/')

अब, हमें निम्नानुसार एक सूप ऑब्जेक्ट बनाने की आवश्यकता है -

soup = BeautifulSoup(r.text, 'lxml')

अब, कोड की अगली पंक्तियों की मदद से, हम डेटा को CSV फ़ाइल में dataprocessing.csv नाम से लिखेंगे।

f = csv.writer(open(' dataprocessing.csv ','w'))
f.writerow(['Title'])
f.writerow([soup.title.text])

इस स्क्रिप्ट को चलाने के बाद, आपके स्थानीय मशीन पर उपर्युक्त CSV फ़ाइल में पाठ्य सूचना या वेबपेज का शीर्षक सहेजा जाएगा।

इसी तरह, हम एकत्रित जानकारी को JSON फ़ाइल में सहेज सकते हैं। निम्नलिखित पायथन स्क्रिप्ट को समझने के लिए एक आसान है, जिसमें हम वही जानकारी ले रहे हैं, जैसा कि हमने पिछले पायथन स्क्रिप्ट में किया था, लेकिन इस बार JSONfile.txt में JSON Python मॉड्यूल का उपयोग करके हड़पी गई जानकारी को सहेजा जाता है।

import requests
from bs4 import BeautifulSoup
import csv
import json
r = requests.get('https://authoraditiagarwal.com/')
soup = BeautifulSoup(r.text, 'lxml')
y = json.dumps(soup.title.text)
with open('JSONFile.txt', 'wt') as outfile:
   json.dump(y, outfile)

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

AWS S3 का उपयोग करके डाटा प्रोसेसिंग

कभी-कभी हम संग्रह के उद्देश्य से अपने स्थानीय भंडारण में बिखरे हुए डेटा को सहेजना चाहते हैं। लेकिन क्या होगा अगर हमें इस डेटा को बड़े पैमाने पर संग्रहीत और विश्लेषण करने की आवश्यकता है? उत्तर क्लाउड स्टोरेज सेवा है जिसका नाम Amazon S3 या AWS S3 (सिंपल स्टोरेज सर्विस) है। मूल रूप से AWS S3 एक ऑब्जेक्ट स्टोरेज है, जो कहीं से भी किसी भी डेटा को स्टोर करने और पुनः प्राप्त करने के लिए बनाया गया है।

हम AWS S3 में डेटा संग्रहीत करने के लिए निम्नलिखित चरणों का पालन कर सकते हैं -

Step 1- पहले हमें एक एडब्ल्यूएस खाते की आवश्यकता होती है जो डेटा संग्रहीत करते समय हमारी पायथन स्क्रिप्ट में उपयोग करने के लिए गुप्त कुंजी प्रदान करेगा। यह एक S3 बाल्टी बनाएगा जिसमें हम अपना डेटा स्टोर कर सकते हैं।

Step 2 - इसके बाद, हमें इंस्टॉल करना होगा boto3S3 बाल्टी तक पहुँचने के लिए पायथन पुस्तकालय। इसे निम्नलिखित कमांड की सहायता से स्थापित किया जा सकता है -

pip install boto3

Step 3 - अगला, हम वेब पेज से डेटा को स्क्रैप करने और इसे AWS S3 बाल्टी में सहेजने के लिए निम्न पायथन स्क्रिप्ट का उपयोग कर सकते हैं।

सबसे पहले, हमें स्क्रैपिंग के लिए पायथन पुस्तकालयों को आयात करने की आवश्यकता है, यहां हम साथ काम कर रहे हैं requests, तथा boto3 S3 बाल्टी के लिए डेटा की बचत।

import requests
import boto3

अब हम अपने URL से डेटा को स्क्रैप कर सकते हैं।

data = requests.get("Enter the URL").text

अब S3 बाल्टी में डेटा संग्रहीत करने के लिए, हमें S3 क्लाइंट बनाने की आवश्यकता है -

s3 = boto3.client('s3')
bucket_name = "our-content"

कोड की अगली पंक्ति निम्नानुसार S3 बाल्टी बनाएगी -

s3.create_bucket(Bucket = bucket_name, ACL = 'public-read')
s3.put_object(Bucket = bucket_name, Key = '', Body = data, ACL = "public-read")

अब आप अपने AWS खाते से हमारी सामग्री के नाम के साथ बाल्टी की जांच कर सकते हैं।

MySQL का उपयोग करके डेटा प्रोसेसिंग

आइए जानें कि MySQL का उपयोग करके डेटा को कैसे प्रोसेस किया जाए। यदि आप MySQL के बारे में सीखना चाहते हैं, तो आप लिंक का अनुसरण कर सकते हैंhttps://www.tutorialspoint.com/mysql/.

निम्नलिखित चरणों की मदद से, हम डेटा को MySQL तालिका में परिमार्जन और संसाधित कर सकते हैं -

Step 1- सबसे पहले, MySQL का उपयोग करके हमें एक डेटाबेस और तालिका बनाने की आवश्यकता है जिसमें हम अपने स्क्रैप किए गए डेटा को सहेजना चाहते हैं। उदाहरण के लिए, हम निम्नलिखित क्वेरी के साथ तालिका बना रहे हैं -

CREATE TABLE Scrap_pages (id BIGINT(7) NOT NULL AUTO_INCREMENT,
title VARCHAR(200), content VARCHAR(10000),PRIMARY KEY(id));

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

ALTER DATABASE scrap CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CONVERT TO CHARACTER SET utf8mb4 COLLATE
utf8mb4_unicode_ci;
ALTER TABLE Scrap_pages CHANGE title title VARCHAR(200) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
ALTER TABLE pages CHANGE content content VARCHAR(10000) CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

Step 3- अब, MySQL को पायथन के साथ एकीकृत करें। इसके लिए, हमें PyMySQL की आवश्यकता होगी जिसे निम्नलिखित कमांड की सहायता से स्थापित किया जा सकता है

pip install PyMySQL

Step 4- अब, पहले से बनाया गया स्क्रैप नाम का हमारा डेटाबेस, वेब से स्क्रैप होने के बाद, स्क्रैप-पेपेज नामक तालिका में, डेटा को बचाने के लिए तैयार है। यहां हमारे उदाहरण में हम विकिपीडिया से डेटा खंगालने जा रहे हैं और इसे हमारे डेटाबेस में सहेजा जाएगा।

सबसे पहले, हमें आवश्यक पायथन मॉड्यूल को आयात करने की आवश्यकता है।

from urllib.request import urlopen
from bs4 import BeautifulSoup
import datetime
import random
import pymysql
import re

अब, एक कनेक्शन बनाएं, जो इसे पायथन के साथ एकीकृत करता है।

conn = pymysql.connect(host='127.0.0.1',user='root', passwd = None, db = 'mysql',
charset = 'utf8')
cur = conn.cursor()
cur.execute("USE scrap")
random.seed(datetime.datetime.now())
def store(title, content):
   cur.execute('INSERT INTO scrap_pages (title, content) VALUES ''("%s","%s")', (title, content))
   cur.connection.commit()

अब, विकिपीडिया के साथ जुड़ें और इससे डेटा प्राप्त करें।

def getLinks(articleUrl):
   html = urlopen('http://en.wikipedia.org'+articleUrl)
   bs = BeautifulSoup(html, 'html.parser')
   title = bs.find('h1').get_text()
   content = bs.find('div', {'id':'mw-content-text'}).find('p').get_text()
   store(title, content)
   return bs.find('div', {'id':'bodyContent'}).findAll('a',href=re.compile('^(/wiki/)((?!:).)*$'))
links = getLinks('/wiki/Kevin_Bacon')
try:
   while len(links) > 0:
      newArticle = links[random.randint(0, len(links)-1)].attrs['href']
      print(newArticle)
      links = getLinks(newArticle)

अंत में, हमें कर्सर और कनेक्शन दोनों को बंद करने की आवश्यकता है।

finally:
   cur.close()
   conn.close()

यह विकिपीडिया से डेटा को स्क्रैप_पेसेज नाम की तालिका में एकत्रित करने से बचाएगा। यदि आप MySQL और वेब स्क्रैपिंग से परिचित हैं, तो उपरोक्त कोड को समझना कठिन नहीं होगा।

PostgreSQL का उपयोग करके डेटा प्रोसेसिंग

PostgreSQL, स्वयंसेवकों की एक विश्वव्यापी टीम द्वारा विकसित, एक खुला स्रोत रिलेशनल डेटाबेस मैनेजमेंट सिस्टम (RDMS) है। PostgreSQL का उपयोग करके स्क्रैप किए गए डेटा को संसाधित करने की प्रक्रिया MySQL के समान है। दो बदलाव होंगे: पहला, कमांड MySQL के लिए अलग होगा और दूसरा, यहाँ हम उपयोग करेंगेpsycopg2 पायथन के साथ अपना एकीकरण करने के लिए पायथन पुस्तकालय।

अगर आप PostgreSQL से परिचित नहीं हैं तो आप इसे सीख सकते हैं https://www.tutorialspoint.com/postgresql/. और निम्नलिखित कमांड की सहायता से हम psycopg2 Python लाइब्रेरी स्थापित कर सकते हैं -

pip install psycopg2

वेब स्क्रैपिंग में आमतौर पर वेब मीडिया सामग्री को डाउनलोड, भंडारण और प्रसंस्करण शामिल होता है। इस अध्याय में, हम समझते हैं कि वेब से डाउनलोड की गई सामग्री को कैसे संसाधित किया जाए।

परिचय

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

वेब पेज से मीडिया सामग्री प्राप्त करना

इस खंड में, हम यह जानने जा रहे हैं कि हम मीडिया सामग्री को कैसे डाउनलोड कर सकते हैं जो वेब सर्वर से मिली जानकारी के आधार पर मीडिया प्रकार का सही प्रतिनिधित्व करती है। हम इसे पायथन की मदद से कर सकते हैंrequests मॉड्यूल जैसा कि हमने पिछले अध्याय में किया था।

सबसे पहले, हमें आवश्यक पायथन मॉड्यूल को निम्नानुसार आयात करना होगा -

import requests

अब, उस मीडिया सामग्री का URL प्रदान करें जिसे हम स्थानीय रूप से डाउनलोड और संग्रहीत करना चाहते हैं।

url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"

HTTP प्रतिक्रिया ऑब्जेक्ट बनाने के लिए निम्न कोड का उपयोग करें।

r = requests.get(url)

निम्नलिखित लाइन ऑफ़ कोड की मदद से हम प्राप्त सामग्री को .png फ़ाइल के रूप में सहेज सकते हैं।

with open("ThinkBig.png",'wb') as f:
   f.write(r.content)

उपरोक्त पायथन स्क्रिप्ट को चलाने के बाद, हमें ThinkBig.png नामक एक फ़ाइल मिलेगी, जिसमें डाउनलोड की गई छवि होगी।

URL से फ़ाइल नाम निकालना

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

पायथन लिपि की मदद से, का उपयोग कर urlparse, हम URL से फ़ाइल नाम निकाल सकते हैं -

import urllib3
import os
url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"
a = urlparse(url)
a.path

आप नीचे दिखाए अनुसार आउटपुट का अवलोकन कर सकते हैं -

'/wp-content/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg'
os.path.basename(a.path)

आप नीचे दिखाए अनुसार आउटपुट का अवलोकन कर सकते हैं -

'MetaSlider_ThinkBig-1080x180.jpg'

एक बार जब आप उपरोक्त स्क्रिप्ट चलाते हैं, तो हमें URL से फ़ाइल नाम मिल जाएगा।

URL से सामग्री के प्रकार के बारे में जानकारी

वेब सर्वर से सामग्री निकालते समय, जीईटी अनुरोध द्वारा, हम वेब सर्वर द्वारा प्रदान की गई इसकी जानकारी भी जांच सकते हैं। निम्नलिखित पायथन लिपि की मदद से हम यह निर्धारित कर सकते हैं कि वेब सर्वर का मतलब सामग्री के प्रकार के साथ क्या है -

सबसे पहले, हमें आवश्यक पायथन मॉड्यूल को निम्नानुसार आयात करना होगा -

import requests

अब, हमें उस मीडिया सामग्री का URL प्रदान करना होगा जिसे हम स्थानीय रूप से डाउनलोड और संग्रहीत करना चाहते हैं।

url = "https://authoraditiagarwal.com/wpcontent/uploads/2018/05/MetaSlider_ThinkBig-1080x180.jpg"

कोड की लाइन के बाद HTTP प्रतिक्रिया ऑब्जेक्ट बनेगा।

r = requests.get(url, allow_redirects=True)

अब, हम वेब सर्वर द्वारा सामग्री के बारे में किस प्रकार की जानकारी प्रदान की जा सकती है।

for headers in r.headers: print(headers)

आप नीचे दिखाए अनुसार आउटपुट का अवलोकन कर सकते हैं -

Date
Server
Upgrade
Connection
Last-Modified
Accept-Ranges
Content-Length
Keep-Alive
Content-Type

निम्नलिखित कोड की मदद से हम सामग्री प्रकार के बारे में विशेष जानकारी प्राप्त कर सकते हैं, सामग्री प्रकार कह सकते हैं -

print (r.headers.get('content-type'))

आप नीचे दिखाए अनुसार आउटपुट का अवलोकन कर सकते हैं -

image/jpeg

निम्नलिखित प्रकार की कोड की मदद से, हम सामग्री प्रकार के बारे में विशेष जानकारी प्राप्त कर सकते हैं, EType कहते हैं -

print (r.headers.get('ETag'))

आप नीचे दिखाए अनुसार आउटपुट का अवलोकन कर सकते हैं -

None

निम्नलिखित आदेश का पालन करें -

print (r.headers.get('content-length'))

आप नीचे दिखाए अनुसार आउटपुट का अवलोकन कर सकते हैं -

12636

निम्नलिखित कोड की मदद से हम सामग्री प्रकार के बारे में विशेष जानकारी प्राप्त कर सकते हैं, सर्वर कहते हैं -

print (r.headers.get('Server'))

आप नीचे दिखाए अनुसार आउटपुट का अवलोकन कर सकते हैं -

Apache

छवियों के लिए थंबनेल उत्पन्न करना

थंबनेल एक बहुत छोटा विवरण या प्रतिनिधित्व है। कोई उपयोगकर्ता केवल एक बड़ी छवि के थंबनेल को सहेजना चाहता है या दोनों को छवि के साथ-साथ थंबनेल को भी सहेजना चाहता है। इस खंड में हम नाम की छवि का एक थंबनेल बनाने जा रहे हैंThinkBig.png पिछले भाग में डाउनलोड किया गया "वेब पेज से मीडिया सामग्री प्राप्त करना"।

इस पायथन लिपि के लिए, हमें पाइलट नामक पायथन लाइब्रेरी स्थापित करने की आवश्यकता है, पायथन इमेज लाइब्रेरी का एक कांटा जिसमें छवियों के हेरफेर के लिए उपयोगी कार्य हैं। इसे निम्नलिखित कमांड की सहायता से स्थापित किया जा सकता है -

pip install pillow

निम्न पायथन स्क्रिप्ट छवि का एक थंबनेल बनाएगी और इसे थंबनेल फ़ाइल के साथ प्रीफ़िक्स करके वर्तमान निर्देशिका में सहेजेगी Th_

import glob
from PIL import Image
for infile in glob.glob("ThinkBig.png"):
   img = Image.open(infile)
   img.thumbnail((128, 128), Image.ANTIALIAS)
   if infile[0:2] != "Th_":
      img.save("Th_" + infile, "png")

उपरोक्त कोड समझने में बहुत आसान है और आप वर्तमान निर्देशिका में थंबनेल फ़ाइल के लिए जाँच कर सकते हैं।

वेबसाइट से स्क्रीनशॉट

वेब स्क्रैपिंग में, एक वेबसाइट का स्क्रीनशॉट लेना एक बहुत ही सामान्य कार्य है। इसे लागू करने के लिए, हम सेलेनियम और वेबड्राइवर का उपयोग करने जा रहे हैं। निम्नलिखित पायथन स्क्रिप्ट वेबसाइट से स्क्रीनशॉट लेगी और इसे वर्तमान निर्देशिका में सहेजेगी।

From selenium import webdriver
path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
browser = webdriver.Chrome(executable_path = path)
browser.get('https://tutorialspoint.com/')
screenshot = browser.save_screenshot('screenshot.png')
browser.quit

आप नीचे दिखाए अनुसार आउटपुट का अवलोकन कर सकते हैं -

DevTools listening on ws://127.0.0.1:1456/devtools/browser/488ed704-9f1b-44f0-
a571-892dc4c90eb7
<bound method WebDriver.quit of <selenium.webdriver.chrome.webdriver.WebDriver
(session="37e8e440e2f7807ef41ca7aa20ce7c97")>>

स्क्रिप्ट चलाने के बाद, आप अपनी वर्तमान निर्देशिका की जांच कर सकते हैं screenshot.png फ़ाइल।

वीडियो के लिए थंबनेल जेनरेशन

मान लीजिए कि हमने वेबसाइट से वीडियो डाउनलोड किए हैं और उनके लिए थंबनेल तैयार करना चाहते हैं ताकि उसके थंबनेल के आधार पर एक विशिष्ट वीडियो पर क्लिक किया जा सके। वीडियो के लिए थंबनेल उत्पन्न करने के लिए हमें एक सरल टूल की आवश्यकता होती है, जिसे कहा जाता हैffmpeg जिसे से डाउनलोड किया जा सकता है www.ffmpeg.org। डाउनलोड करने के बाद, हमें अपने ओएस के विनिर्देशों के अनुसार इसे स्थापित करने की आवश्यकता है।

निम्नलिखित पायथन लिपि वीडियो के थंबनेल उत्पन्न करेगी और इसे हमारी स्थानीय निर्देशिका में सहेजेगी -

import subprocess
video_MP4_file = “C:\Users\gaurav\desktop\solar.mp4
thumbnail_image_file = 'thumbnail_solar_video.jpg'
subprocess.call(['ffmpeg', '-i', video_MP4_file, '-ss', '00:00:20.000', '-
   vframes', '1', thumbnail_image_file, "-y"])

उपरोक्त स्क्रिप्ट को चलाने के बाद, हमें थंबनेल नाम मिलेगा thumbnail_solar_video.jpg हमारी स्थानीय निर्देशिका में सहेजा गया।

एक एमपी 3 के लिए एक MP4 वीडियो तेजस्वी

माना कि आपने किसी वेबसाइट से कुछ वीडियो फ़ाइल डाउनलोड की है, लेकिन आपको अपने उद्देश्य की पूर्ति के लिए केवल उस फ़ाइल से ऑडियो की आवश्यकता होती है, फिर इसे पायथन में पाइथन लाइब्रेरी की मदद से किया जा सकता है moviepy जिसे निम्नलिखित कमांड की सहायता से स्थापित किया जा सकता है -

pip install moviepy

अब, निम्नलिखित स्क्रिप्ट की मदद से मूवीपी को सफलतापूर्वक स्थापित करने के बाद हम एमपी 3 में कनवर्ट कर सकते हैं और MP4 कर सकते हैं।

import moviepy.editor as mp
clip = mp.VideoFileClip(r"C:\Users\gaurav\Desktop\1234.mp4")
clip.audio.write_audiofile("movie_audio.mp3")

आप नीचे दिखाए अनुसार आउटपुट का अवलोकन कर सकते हैं -

[MoviePy] Writing audio in movie_audio.mp3
100%|¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦| 674/674 [00:01<00:00,
476.30it/s]
[MoviePy] Done.

उपरोक्त स्क्रिप्ट स्थानीय निर्देशिका में ऑडियो एमपी 3 फ़ाइल को बचाएगा।

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

परिचय

आप प्राकृतिक भाषा टूल किट (NLTK) नामक पायथन लाइब्रेरी का उपयोग करके पाठ विश्लेषण कर सकते हैं। एनएलटीके की अवधारणाओं में आगे बढ़ने से पहले, हमें पाठ विश्लेषण और वेब स्क्रैपिंग के बीच के संबंध को समझना चाहिए।

पाठ में शब्दों का विश्लेषण हमें यह जानने के लिए प्रेरित कर सकता है कि कौन से शब्द महत्वपूर्ण हैं, कौन से शब्द असामान्य हैं, कैसे शब्द समूहबद्ध हैं। यह विश्लेषण वेब स्क्रैपिंग के कार्य को आसान बनाता है।

एनएलटीके के साथ शुरुआत करना

प्राकृतिक भाषा टूलकिट (एनएलटीके) पायथन पुस्तकालयों का संग्रह है जो विशेष रूप से अंग्रेजी जैसे प्राकृतिक भाषा के पाठ में पाए जाने वाले भाषण के हिस्सों की पहचान और टैगिंग के लिए डिज़ाइन किया गया है।

एनएलटीके स्थापित करना

आप Python में NLTK को स्थापित करने के लिए निम्नलिखित कमांड का उपयोग कर सकते हैं -

pip install nltk

यदि आप एनाकोंडा का उपयोग कर रहे हैं, तो एनएलटीके के लिए एक कोंडा पैकेज निम्नलिखित कमांड का उपयोग करके बनाया जा सकता है -

conda install -c anaconda nltk

एनएलटीके डेटा डाउनलोड करना

एनएलटीके स्थापित करने के बाद, हमें प्रीसेट टेक्स्ट रिपॉजिटरी डाउनलोड करना होगा। लेकिन टेक्स्ट प्रीसेट रिपॉजिटरी डाउनलोड करने से पहले, हमें इसकी मदद से एनएलटीके आयात करना होगाimport आदेश निम्नानुसार है -

mport nltk

अब निम्नलिखित आदेश की मदद से एनएलटीके डेटा डाउनलोड किया जा सकता है -

nltk.download()

एनएलटीके के सभी उपलब्ध पैकेजों की स्थापना में कुछ समय लगेगा, लेकिन हमेशा सभी पैकेजों को स्थापित करने की सिफारिश की जाती है।

अन्य आवश्यक पैकेजों को स्थापित करना

हमें कुछ अन्य पायथन पैकेज भी चाहिए gensim तथा pattern एनएलटीके का उपयोग करके प्राकृतिक भाषा प्रसंस्करण अनुप्रयोगों के निर्माण के साथ-साथ पाठ विश्लेषण करने के लिए।

gensim- एक मजबूत सिमेंटिक मॉडलिंग लाइब्रेरी जो कई अनुप्रयोगों के लिए उपयोगी है। इसे निम्न कमांड द्वारा स्थापित किया जा सकता है -

pip install gensim

pattern - बनाने के लिए इस्तेमाल किया gensimपैकेज ठीक से काम करते हैं। इसे निम्न कमांड द्वारा स्थापित किया जा सकता है -

pip install pattern

tokenization

दिए गए पाठ को तोड़ने की प्रक्रिया को टोकन नामक छोटी इकाइयों में, टोकन कहा जाता है। ये टोकन शब्द, संख्या या विराम चिह्न हो सकते हैं। इसे भी कहा जाता हैword segmentation

उदाहरण

NLTK मॉड्यूल टोकन के लिए अलग पैकेज प्रदान करता है। हम अपनी आवश्यकता के अनुसार इन पैकेजों का उपयोग कर सकते हैं। कुछ पैकेज यहाँ वर्णित हैं -

sent_tokenize package- यह पैकेज इनपुट टेक्स्ट को वाक्यों में विभाजित करेगा। इस पैकेज को आयात करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं -

from nltk.tokenize import sent_tokenize

word_tokenize package- यह पैकेज इनपुट टेक्स्ट को शब्दों में विभाजित करेगा। इस पैकेज को आयात करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं -

from nltk.tokenize import word_tokenize

WordPunctTokenizer package- यह पैकेज इनपुट टेक्स्ट के साथ-साथ विराम चिह्नों को भी शब्दों में विभाजित करेगा। इस पैकेज को आयात करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं -

from nltk.tokenize import WordPuncttokenizer

स्टेमिंग

किसी भी भाषा में, शब्दों के विभिन्न रूप होते हैं। एक भाषा में व्याकरणिक कारणों से बहुत सारी विविधताएं शामिल हैं। उदाहरण के लिए, शब्दों पर विचार करेंdemocracy, democratic, तथा democratization। मशीन सीखने के साथ-साथ वेब स्क्रैपिंग परियोजनाओं के लिए, मशीनों के लिए यह समझना महत्वपूर्ण है कि इन विभिन्न शब्दों का आधार आधार एक ही है। इसलिए हम कह सकते हैं कि पाठ का विश्लेषण करते समय शब्दों के आधार रूपों को निकालना उपयोगी हो सकता है।

यह उपजी द्वारा प्राप्त किया जा सकता है जिसे शब्दों के छोर से काटकर शब्दों के आधार रूपों को निकालने की अनुमानी प्रक्रिया के रूप में परिभाषित किया जा सकता है।

NLTK मॉड्यूल स्टेमिंग के लिए अलग पैकेज प्रदान करता है। हम अपनी आवश्यकता के अनुसार इन पैकेजों का उपयोग कर सकते हैं। इन पैकेजों में से कुछ यहाँ वर्णित हैं -

PorterStemmer package- पोर्टर के एल्गोरिथ्म का उपयोग आधार फॉर्म निकालने के लिए इस पायथन स्टेमिंग पैकेज द्वारा किया जाता है। इस पैकेज को आयात करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं -

from nltk.stem.porter import PorterStemmer

उदाहरण के लिए, शब्द देने के बाद ‘writing’ इस स्टेमर के इनपुट के रूप में, आउटपुट शब्द होगा ‘write’ उपजी के बाद।

LancasterStemmer package- लैंकेस्टर के एल्गोरिथ्म का उपयोग आधार फॉर्म निकालने के लिए इस पायथन स्टेमिंग पैकेज द्वारा किया जाता है। इस पैकेज को आयात करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं -

from nltk.stem.lancaster import LancasterStemmer

उदाहरण के लिए, शब्द देने के बाद ‘writing’ इस स्टेमर के इनपुट के रूप में तब आउटपुट शब्द होगा ‘writ’ उपजी के बाद।

SnowballStemmer package- स्नोबॉल के एल्गोरिथ्म का उपयोग आधार फॉर्म निकालने के लिए इस पायथन स्टेमिंग पैकेज द्वारा किया जाता है। इस पैकेज को आयात करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं -

from nltk.stem.snowball import SnowballStemmer

उदाहरण के लिए, इस स्टेमर के इनपुट के रूप में 'राइटिंग' शब्द देने के बाद आउटपुट 'स्टेम' शब्द होगा।

lemmatization

शब्दों के आधार रूप को निकालने का एक अन्य तरीका है नींबू पानी का उपयोग, आम तौर पर शब्दावली और रूपात्मक विश्लेषण का उपयोग करके विभक्ति अंत को हटाने का लक्ष्य है। लेमेट्रीकरण के बाद किसी भी शब्द के आधार रूप को लेम्मा कहा जाता है।

NLTK मॉड्यूल नींबू पानी के लिए निम्नलिखित पैकेज प्रदान करता है -

WordNetLemmatizer package- यह शब्द के आधार रूप को इस आधार पर निकालेगा कि क्या इसे संज्ञा के रूप में क्रिया के रूप में उपयोग किया जाता है। इस पैकेज को आयात करने के लिए आप निम्न कमांड का उपयोग कर सकते हैं -

from nltk.stem import WordNetLemmatizer

ठस

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

उदाहरण

इस उदाहरण में, हम एनएलटीके पायथन मॉड्यूल का उपयोग करके नन-फ्रास चूनकिंग को लागू करने जा रहे हैं। NP chunking, chunking की एक श्रेणी है जो वाक्य में संज्ञा वाक्यांशों को चुनती है।

संज्ञा वाक्यांश को लागू करने के लिए कदम

हमें संज्ञा-वाक्यांश को लागू करने के लिए नीचे दिए गए चरणों का पालन करने की आवश्यकता है -

चरण 1 - पंक व्याकरण परिभाषा

पहले चरण में हम व्याकरण को मंथन के लिए परिभाषित करेंगे। इसमें उन नियमों का समावेश होगा, जिनका हमें पालन करने की आवश्यकता है।

चरण 2 - चकोर पार्सर निर्माण

अब, हम एक चकोर पार्सर बनाएंगे। यह व्याकरण को पार्स करेगा और आउटपुट देगा।

चरण 3 - आउटपुट

इस अंतिम चरण में, आउटपुट एक ट्री प्रारूप में उत्पादित किया जाएगा।

सबसे पहले, हमें एनएलटीके पैकेज को निम्नानुसार आयात करना होगा -

import nltk

अगला, हमें वाक्य को परिभाषित करने की आवश्यकता है। यहाँ DT: निर्धारक, VBP: क्रिया, JJ: विशेषण, IN: पूर्वसर्ग और NN: संज्ञा।

sentence = [("a", "DT"),("clever","JJ"),("fox","NN"),("was","VBP"),("jumping","VBP"),("over","IN"),("the","DT"),("wall","NN")]

अगला, हम व्याकरण को नियमित अभिव्यक्ति के रूप में दे रहे हैं।

grammar = "NP:{<DT>?<JJ>*<NN>}"

अब, कोड की अगली पंक्ति व्याकरण को पार्स करने के लिए एक पार्सर को परिभाषित करेगी।

parser_chunking = nltk.RegexpParser(grammar)

अब, पार्सर वाक्य को पार्स करेगा।

parser_chunking.parse(sentence)

अगला, हम चर में अपना आउटपुट दे रहे हैं।

Output = parser_chunking.parse(sentence)

निम्नलिखित कोड की मदद से, हम अपने उत्पादन को एक पेड़ के रूप में आकर्षित कर सकते हैं जैसा कि नीचे दिखाया गया है।

output.draw()

वर्ड ऑफ़ बग (BoW) मॉडल निकालने और पाठ को न्यूमेरिक फॉर्म में परिवर्तित करने के लिए

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

BoW मॉडल का कार्य करना

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

उदाहरण

मान लें कि हमारे पास निम्नलिखित दो वाक्य हैं -

Sentence1 - यह बैग ऑफ वर्ड्स मॉडल का एक उदाहरण है।

Sentence2 - हम बैग ऑफ वर्ड्स मॉडल का उपयोग करके सुविधाओं को निकाल सकते हैं।

अब, इन दो वाक्यों पर विचार करके, हमारे पास निम्नलिखित 14 अलग-अलग शब्द हैं -

  • This
  • is
  • an
  • example
  • bag
  • of
  • words
  • model
  • we
  • can
  • extract
  • features
  • by
  • using

एनएलटीके में शब्दों के मॉडल का एक बैग का निर्माण

आइए हम निम्नलिखित पायथन लिपि पर गौर करें जो NLTK में BoW मॉडल का निर्माण करेगी।

सबसे पहले, निम्नलिखित पैकेज आयात करें -

from sklearn.feature_extraction.text import CountVectorizer

अगला, वाक्यों के सेट को परिभाषित करें -

Sentences=['This is an example of Bag of Words model.', ' We can extract
   features by using Bag of Words model.']
   vector_count = CountVectorizer()
   features_text = vector_count.fit_transform(Sentences).todense()
   print(vector_count.vocabulary_)

उत्पादन

यह दर्शाता है कि उपरोक्त दो वाक्यों में हमारे 14 अलग-अलग शब्द हैं -

{
   'this': 10, 'is': 7, 'an': 0, 'example': 4, 'of': 9, 
   'bag': 1, 'words': 13, 'model': 8, 'we': 12, 'can': 3, 
   'extract': 5, 'features': 6, 'by': 2, 'using':11
}

विषय मॉडलिंग: पाठ डेटा में पैटर्न की पहचान करना

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

आप निम्नलिखित परिदृश्य में विषय मॉडलिंग का उपयोग कर सकते हैं -

पाठ वर्गीकरण

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

अनुशंसा प्रणाली

हम समानता उपायों का उपयोग करके अनुशंसाकर्ता सिस्टम का निर्माण कर सकते हैं।

विषय मॉडलिंग एल्गोरिदम

हम निम्नलिखित एल्गोरिदम का उपयोग करके विषय मॉडलिंग को लागू कर सकते हैं -

Latent Dirichlet Allocation(LDA) - यह सबसे लोकप्रिय एल्गोरिथ्म में से एक है जो विषय मॉडलिंग को लागू करने के लिए संभाव्य चित्रमय मॉडल का उपयोग करता है।

Latent Semantic Analysis(LDA) or Latent Semantic Indexing(LSI) - यह रेखीय बीजगणित पर आधारित है और दस्तावेज़ अवधि मैट्रिक्स पर एसवीडी (एकवचन मूल्य अपघटन) की अवधारणा का उपयोग करता है।

Non-Negative Matrix Factorization (NMF) - यह भी एलडीए की तरह रैखिक बीजगणित पर आधारित है।

उपर्युक्त एल्गोरिदम में निम्नलिखित तत्व होंगे -

  • विषयों की संख्या: पैरामीटर
  • दस्तावेज़-शब्द मैट्रिक्स: इनपुट
  • डब्ल्यूटीएम (वर्ड टॉपिक मैट्रिक्स) और टीडीएम (विषय दस्तावेज़ मैट्रिक्स): आउटपुट

परिचय

यदि वेब गतिशील है तो वेब स्क्रैपिंग एक जटिल कार्य है और जटिलता कई गुना है। संयुक्त राष्ट्र के ग्लोबल ऑडिट ऑफ वेब एक्सेसिबिलिटी के अनुसार 70% से अधिक वेबसाइटें प्रकृति में गतिशील हैं और वे अपनी कार्यक्षमता के लिए जावास्क्रिप्ट पर निर्भर हैं।

डायनामिक वेबसाइट उदाहरण

आइए हम एक गतिशील वेबसाइट के एक उदाहरण को देखें और इसके बारे में जानें कि क्यों परिमार्जन करना मुश्किल है। यहां हम नाम की वेबसाइट से खोज करने का उदाहरण लेने जा रहे हैंhttp://example.webscraping.com/places/default/search.लेकिन हम यह कैसे कह सकते हैं कि यह वेबसाइट गतिशील प्रकृति की है? यह पायथन लिपि के अनुसरण के आउटपुट से आंका जा सकता है जो उपर्युक्त वेबपेज से डेटा खंगालने की कोशिश करेगा -

import re
import urllib.request
response = urllib.request.urlopen('http://example.webscraping.com/places/default/search')
html = response.read()
text = html.decode()
re.findall('(.*?)',text)

उत्पादन

[ ]

उपरोक्त आउटपुट से पता चलता है कि उदाहरण स्क्रैपर जानकारी निकालने में विफल रहा क्योंकि <div> तत्व जिसे हम खोजने की कोशिश कर रहे हैं वह खाली है।

डायनामिक वेबसाइटों से डेटा स्क्रैप करने के लिए दृष्टिकोण

हमने देखा है कि स्क्रैपर जानकारी को डायनेमिक वेबसाइट से हटा नहीं सकता क्योंकि डेटा को गतिशील रूप से जावास्क्रिप्ट के साथ लोड किया जाता है। ऐसे मामलों में, हम गतिशील जावास्क्रिप्ट निर्भर वेबसाइटों से डेटा स्क्रैप करने के लिए निम्नलिखित दो तकनीकों का उपयोग कर सकते हैं -

  • रिवर्स इंजीनियरिंग जावास्क्रिप्ट
  • जावास्क्रिप्ट का प्रतिपादन

रिवर्स इंजीनियरिंग जावास्क्रिप्ट

रिवर्स इंजीनियरिंग नामक प्रक्रिया उपयोगी होगी और हमें यह समझने में मदद करती है कि वेब पेजों द्वारा डेटा को गतिशील रूप से कैसे लोड किया जाता है।

ऐसा करने के लिए, हमें क्लिक करने की आवश्यकता है inspect elementएक निर्दिष्ट URL के लिए टैब। आगे, हम क्लिक करेंगेNETWORK उस वेब पेज के लिए किए गए सभी अनुरोधों को खोजने के लिए टैब /ajax। ब्राउज़र से या AJAX डेटा टैब के माध्यम से एक्सेस करने के बजाय, हम इसे पायथन स्क्रिप्ट का अनुसरण करने की मदद से भी कर सकते हैं -

import requests
url=requests.get('http://example.webscraping.com/ajax/search.json?page=0&page_size=10&search_term=a')
url.json()

उदाहरण

उपरोक्त स्क्रिप्ट हमें पायथन जसन विधि का उपयोग करके JSON प्रतिक्रिया तक पहुंचने की अनुमति देती है। इसी तरह हम कच्चे स्ट्रिंग प्रतिक्रिया को डाउनलोड कर सकते हैं और अजगर की json.loads विधि का उपयोग करके, हम इसे भी लोड कर सकते हैं। हम पायथन लिपि के अनुसरण की मदद से ऐसा कर रहे हैं। यह मूल रूप से वर्णमाला 'a' के अक्षर को खोजकर और फिर JSON प्रतिक्रियाओं के परिणामी पृष्ठों को प्रदर्शित करके सभी देशों को परिमार्जन करेगा।

import requests
import string
PAGE_SIZE = 15
url = 'http://example.webscraping.com/ajax/' + 'search.json?page={}&page_size={}&search_term=a'
countries = set()
for letter in string.ascii_lowercase:
   print('Searching with %s' % letter)
   page = 0
   while True:
   response = requests.get(url.format(page, PAGE_SIZE, letter))
   data = response.json()
   print('adding %d records from the page %d' %(len(data.get('records')),page))
   for record in data.get('records'):countries.add(record['country'])
   page += 1
   if page >= data['num_pages']:
      break
   with open('countries.txt', 'w') as countries_file:
   countries_file.write('n'.join(sorted(countries)))

उपरोक्त स्क्रिप्ट को चलाने के बाद, हम निम्नलिखित आउटपुट प्राप्त करेंगे और रिकॉर्ड देशों में सहेजे जाएंगे।

उत्पादन

Searching with a
adding 15 records from the page 0
adding 15 records from the page 1
...

जावास्क्रिप्ट का प्रतिपादन

पिछले भाग में, हमने वेब पेज पर रिवर्स इंजीनियरिंग किया कि एपीआई ने कैसे काम किया और हम एकल अनुरोध में परिणाम प्राप्त करने के लिए इसका उपयोग कैसे कर सकते हैं। हालांकि, हम रिवर्स इंजीनियरिंग करते समय कठिनाइयों का सामना कर सकते हैं -

  • कभी-कभी वेबसाइटें बहुत मुश्किल हो सकती हैं। उदाहरण के लिए, यदि वेबसाइट Google ब्राउज़र टूलकिट (GWT) जैसे उन्नत ब्राउज़र टूल के साथ बनाई गई है, तो परिणामस्वरूप जेएस कोड मशीन-जनरेट किया जाएगा और इंजीनियर को समझना और रिवर्स करना मुश्किल होगा।

  • कुछ उच्च स्तर की रूपरेखाएँ React.js पहले से ही जटिल जावास्क्रिप्ट तर्क को अमूर्त करके रिवर्स इंजीनियरिंग को कठिन बना सकते हैं।

उपरोक्त कठिनाइयों का समाधान एक ब्राउज़र रेंडरिंग इंजन का उपयोग करना है जो HTML को पार्स करता है, CSS प्रारूपण लागू करता है और वेब पेज प्रदर्शित करने के लिए जावास्क्रिप्ट को निष्पादित करता है।

उदाहरण

इस उदाहरण में, जावा स्क्रिप्ट के प्रतिपादन के लिए हम एक परिचित पायथन मॉड्यूल सेलेनियम का उपयोग करने जा रहे हैं। निम्नलिखित पायथन कोड सेलेनियम की मदद से एक वेब पेज प्रस्तुत करेगा -

सबसे पहले, हमें सेलेनियम से वेबड्राइवर आयात करने की आवश्यकता है -

from selenium import webdriver

अब, वेब ड्राइवर का पथ प्रदान करें जिसे हमने अपनी आवश्यकता के अनुसार डाउनलोड किया है -

path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
driver = webdriver.Chrome(executable_path = path)

अब, url प्रदान करें जिसे हम उस वेब ब्राउज़र में खोलना चाहते हैं जिसे अब हमारे पाइथन स्क्रिप्ट द्वारा नियंत्रित किया गया है।

driver.get('http://example.webscraping.com/search')

अब, हम चयन करने के लिए तत्व सेट करने के लिए खोज टूलबॉक्स की आईडी का उपयोग कर सकते हैं।

driver.find_element_by_id('search_term').send_keys('.')

इसके बाद, हम जावा स्क्रिप्ट का चयन बॉक्स सामग्री सेट करने के लिए निम्नानुसार कर सकते हैं -

js = "document.getElementById('page_size').options[1].text = '100';"
driver.execute_script(js)

कोड की निम्न पंक्ति से पता चलता है कि खोज वेब पेज पर क्लिक करने के लिए तैयार है -

driver.find_element_by_id('search').click()

कोड की अगली पंक्ति से पता चलता है कि AJAX अनुरोध को पूरा करने के लिए 45 सेकंड तक इंतजार करना होगा।

driver.implicitly_wait(45)

अब, देश लिंक का चयन करने के लिए, हम सीएसएस चयनकर्ता का उपयोग इस प्रकार कर सकते हैं -

links = driver.find_elements_by_css_selector('#results a')

अब देशों की सूची बनाने के लिए प्रत्येक लिंक का पाठ निकाला जा सकता है -

countries = [link.text for link in links]
print(countries)
driver.close()

पिछले अध्याय में, हमने डायनामिक वेबसाइटों को स्क्रैप करते हुए देखा है। इस अध्याय में, हम उन वेबसाइटों के स्क्रैपिंग को समझते हैं जो उपयोगकर्ता आधारित इनपुट पर काम करते हैं, जो फार्म आधारित वेबसाइट हैं।

परिचय

इन दिनों डब्ल्यूडब्ल्यूडब्ल्यू (वर्ल्ड वाइड वेब) सोशल मीडिया के साथ-साथ उपयोगकर्ता-आधारित सामग्री की ओर बढ़ रहा है। तो सवाल यह उठता है कि हम इस तरह की सूचनाओं तक कैसे पहुँच सकते हैं जो लॉगिन स्क्रीन से परे है? इसके लिए हमें रूपों और लॉगिन से निपटने की आवश्यकता है।

पिछले अध्यायों में, हमने जानकारी प्राप्त करने के लिए HTTP GET विधि के साथ काम किया था लेकिन इस अध्याय में हम HTTP POST विधि के साथ काम करेंगे जो सूचना को भंडारण और विश्लेषण के लिए एक वेब सर्वर पर धकेलती है।

लॉग इन फॉर्म के साथ बातचीत

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

इस खंड में, हम पाइथन अनुरोध पुस्तकालय की सहायता से एक सरल सबमिट फ़ॉर्म से निपटने जा रहे हैं।

सबसे पहले, हमें अनुरोध पुस्तकालय को निम्नानुसार आयात करना होगा -

import requests

अब, हमें लॉगिन फ़ॉर्म के क्षेत्रों के लिए जानकारी प्रदान करने की आवश्यकता है।

parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}

कोड की अगली पंक्ति में, हमें URL प्रदान करना होगा जिस पर फ़ॉर्म की कार्रवाई होगी।

r = requests.post(“enter the URL”, data = parameters)
print(r.text)

स्क्रिप्ट चलाने के बाद, यह उस पृष्ठ की सामग्री को लौटा देगा जहां कार्रवाई हुई है।

मान लीजिए अगर आप फॉर्म के साथ कोई भी छवि सबमिट करना चाहते हैं, तो यह request.post () के साथ बहुत आसान है। आप इसे पायथन लिपि की मदद से समझ सकते हैं -

import requests
file = {‘Uploadfile’: open(’C:\Usres\desktop\123.png’,‘rb’)}
r = requests.post(“enter the URL”, files = file)
print(r.text)

वेब सर्वर से कुकीज़ लोड कर रहा है

एक कुकी, जिसे कभी-कभी वेब कुकी या इंटरनेट कुकी कहा जाता है, एक वेबसाइट से भेजे गए डेटा का एक छोटा सा टुकड़ा होता है और हमारा कंप्यूटर इसे हमारे वेब ब्राउज़र के अंदर स्थित एक फ़ाइल में संग्रहीत करता है।

लॉगिन रूपों के साथ व्यवहार के संदर्भ में, कुकीज़ दो प्रकार की हो सकती हैं। एक, हम पिछले अनुभाग में निपटाते हैं, जो हमें एक वेबसाइट पर जानकारी जमा करने की अनुमति देता है और दूसरा जो हमें वेबसाइट पर हमारी यात्रा के दौरान एक स्थायी "लॉग-इन" स्थिति में रहने देता है। दूसरे प्रकार के प्रपत्रों के लिए, वेबसाइट यह पता लगाने के लिए कुकीज़ का उपयोग करती है कि कौन लॉग इन है और कौन नहीं है।

कुकीज़ क्या करते हैं?

इन दिनों ज्यादातर वेबसाइट्स ट्रैकिंग के लिए कुकीज़ का इस्तेमाल कर रही हैं। हम निम्नलिखित चरणों की सहायता से कुकीज़ के कार्य को समझ सकते हैं -

Step 1- सबसे पहले, साइट हमारे लॉगिन क्रेडेंशियल्स को प्रमाणित करेगी और इसे हमारे ब्राउज़र की कुकी में संग्रहीत करेगी। इस कुकी में आम तौर पर एक सर्वर-जनित टॉक, टाइम-आउट और ट्रैकिंग जानकारी होती है।

Step 2- इसके बाद, वेबसाइट प्रमाणीकरण के प्रमाण के रूप में कुकी का उपयोग करेगी। जब भी हम वेबसाइट पर जाते हैं तो यह प्रमाणीकरण हमेशा दिखाया जाता है।

वेब स्क्रैपर्स के लिए कुकीज़ बहुत समस्याग्रस्त हैं क्योंकि यदि वेब स्क्रैपर्स कुकीज़ का ट्रैक नहीं रखते हैं, तो सबमिट किया गया फॉर्म वापस भेज दिया जाता है और अगले पेज पर ऐसा लगता है कि उन्होंने कभी लॉग इन नहीं किया है। कुकीज़ की मदद से कुकीज़ को ट्रैक करना बहुत आसान है। अजगर requests पुस्तकालय, जैसा कि नीचे दिखाया गया है -

import requests
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = requests.post(“enter the URL”, data = parameters)

कोड की उपरोक्त पंक्ति में, URL वह पृष्ठ होगा जो लॉगिन फ़ॉर्म के लिए प्रोसेसर के रूप में कार्य करेगा।

print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)

उपरोक्त स्क्रिप्ट को चलाने के बाद, हम अंतिम अनुरोध के परिणाम से कुकीज़ को पुनः प्राप्त करेंगे।

कुकीज़ के साथ एक और समस्या है कि कभी-कभी वेबसाइटें बिना चेतावनी के कुकीज़ को अक्सर संशोधित करती हैं। इस तरह की स्थिति से निपटा जा सकता हैrequests.Session() निम्नानुसार है -

import requests
session = requests.Session()
parameters = {‘Name’:’Enter your name’, ‘Email-id’:’Your Emailid’,’Message’:’Type your message here’}
r = session.post(“enter the URL”, data = parameters)

कोड की उपरोक्त पंक्ति में, URL वह पृष्ठ होगा जो लॉगिन फ़ॉर्म के लिए प्रोसेसर के रूप में कार्य करेगा।

print(‘The cookie is:’)
print(r.cookies.get_dict())
print(r.text)

निरीक्षण करें कि आप आसानी से सत्र के साथ और सत्र के बिना स्क्रिप्ट के बीच अंतर को समझ सकते हैं।

अजगर के साथ स्वचालित रूप

इस खंड में हम मैकेनाइज्ड नामक पायथन मॉड्यूल से निपटने जा रहे हैं जो हमारे काम को कम करेगा और फॉर्म भरने की प्रक्रिया को स्वचालित करेगा।

मैकेनाइज्ड मॉड्यूल

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

pip install mechanize

ध्यान दें कि यह केवल पायथन 2.x में काम करेगा।

उदाहरण

इस उदाहरण में, हम एक लॉगिन फ़ॉर्म भरने की प्रक्रिया को स्वचालित करने जा रहे हैं, जिसमें दो फ़ील्ड हैं जैसे ईमेल और पासवर्ड -

import mechanize
brwsr = mechanize.Browser()
brwsr.open(Enter the URL of login)
brwsr.select_form(nr = 0)
brwsr['email'] = ‘Enter email’
brwsr['password'] = ‘Enter password’
response = brwsr.submit()
brwsr.submit()

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

इस अध्याय में, हम समझते हैं कि वेब स्क्रैपिंग और प्रसंस्करण कैप्चा कैसे करें जो मानव या रोबोट के लिए उपयोगकर्ता के परीक्षण के लिए उपयोग किया जाता है।

कैप्चा क्या है?

कैप्चा का पूर्ण रूप है Completely Automated Public Turing test to tell Computers and Humans Apart, जो स्पष्ट रूप से बताता है कि यह निर्धारित करने के लिए एक परीक्षण है कि उपयोगकर्ता मानव है या नहीं।

एक कैप्चा एक विकृत छवि है जिसे आमतौर पर कंप्यूटर प्रोग्राम द्वारा पता लगाना आसान नहीं है लेकिन एक मानव किसी तरह इसे समझने का प्रबंधन कर सकता है। बॉट्स को बातचीत से रोकने के लिए ज्यादातर वेबसाइट कैप्चा का इस्तेमाल करती हैं।

अजगर के साथ कैप्चा लोड कर रहा है

मान लीजिए कि हम एक वेबसाइट पर पंजीकरण करना चाहते हैं और कैप्चा के साथ फार्म है, तो कैप्चा छवि को लोड करने से पहले हमें फॉर्म द्वारा आवश्यक विशिष्ट जानकारी के बारे में जानना होगा। अगली पायथन लिपि की मदद से हम नाम की वेबसाइट पर पंजीकरण फॉर्म की आवश्यकताओं को समझ सकते हैंhttp://example.webscrapping.com.

import lxml.html
import urllib.request as urllib2
import pprint
import http.cookiejar as cookielib
def form_parsing(html):
   tree = lxml.html.fromstring(html)
   data = {}
   for e in tree.cssselect('form input'):
      if e.get('name'):
         data[e.get('name')] = e.get('value')
   return data
REGISTER_URL = '<a target="_blank" rel="nofollow" 
   href="http://example.webscraping.com/user/register">http://example.webscraping.com/user/register'</a>
ckj = cookielib.CookieJar()
browser = urllib2.build_opener(urllib2.HTTPCookieProcessor(ckj))
html = browser.open(
   '<a target="_blank" rel="nofollow" 
      href="http://example.webscraping.com/places/default/user/register?_next">
      http://example.webscraping.com/places/default/user/register?_next</a> = /places/default/index'
).read()
form = form_parsing(html)
pprint.pprint(form)

उपरोक्त पायथन लिपि में, पहले हमने एक फंक्शन को परिभाषित किया जो lxml python मॉड्यूल का उपयोग करके फॉर्म को पार्स करेगा और फिर यह फॉर्म की आवश्यकताओं को निम्नानुसार प्रिंट करेगा -

{
   '_formkey': '5e306d73-5774-4146-a94e-3541f22c95ab',
   '_formname': 'register',
   '_next': '/places/default/index',
   'email': '',
   'first_name': '',
   'last_name': '',
   'password': '',
   'password_two': '',
   'recaptcha_response_field': None
}

आप उपरोक्त आउटपुट से जांच कर सकते हैं कि सभी जानकारी को छोड़कर recpatcha_response_fieldसमझने योग्य और सीधे हैं। अब सवाल उठता है कि हम इस जटिल जानकारी को कैसे संभाल सकते हैं और कैप्चा डाउनलोड कर सकते हैं। यह निम्नानुसार तकिया पायथन पुस्तकालय की मदद से किया जा सकता है;

तकिया पायथन पैकेज

तकिया पायथन इमेज लाइब्रेरी का एक कांटा है जिसमें छवियों को हेरफेर करने के लिए उपयोगी कार्य हैं। इसे निम्नलिखित कमांड की सहायता से स्थापित किया जा सकता है -

pip install pillow

अगले उदाहरण में हम इसका इस्तेमाल कैप्चा लोड करने के लिए करेंगे -

from io import BytesIO
import lxml.html
from PIL import Image
def load_captcha(html):
   tree = lxml.html.fromstring(html)
   img_data = tree.cssselect('div#recaptcha img')[0].get('src')
   img_data = img_data.partition(',')[-1]
   binary_img_data = img_data.decode('base64')
   file_like = BytesIO(binary_img_data)
   img = Image.open(file_like)
   return img

उपरोक्त अजगर स्क्रिप्ट का उपयोग कर रहा है pillowअजगर पैकेज और कैप्चा छवि लोड करने के लिए एक फ़ंक्शन को परिभाषित करना। यह नाम के फ़ंक्शन के साथ उपयोग किया जाना चाहिएform_parser()कि पंजीकरण फार्म के बारे में जानकारी प्राप्त करने के लिए पिछले स्क्रिप्ट में परिभाषित किया गया है। यह स्क्रिप्ट एक उपयोगी प्रारूप में कैप्चा छवि को बचाएगा, जिसे आगे स्ट्रिंग के रूप में निकाला जा सकता है।

ओसीआर: पायथन का उपयोग करके छवि से पाठ निकालना

एक उपयोगी प्रारूप में कैप्चा लोड करने के बाद, हम इसे ऑप्टिकल कैरेक्टर रिकॉग्निशन (ओसीआर) की मदद से निकाल सकते हैं, छवियों से पाठ निकालने की प्रक्रिया। इस उद्देश्य के लिए, हम खुले स्रोत Tesseract OCR इंजन का उपयोग करने जा रहे हैं। इसे निम्नलिखित कमांड की सहायता से स्थापित किया जा सकता है -

pip install pytesseract

उदाहरण

यहाँ हम उपरोक्त पायथन लिपि का विस्तार करेंगे, जिसने तकिया पायथन पैकेज का उपयोग करके कैप्चा लोड किया, जो निम्नानुसार है -

import pytesseract
img = get_captcha(html)
img.save('captcha_original.png')
gray = img.convert('L')
gray.save('captcha_gray.png')
bw = gray.point(lambda x: 0 if x < 1 else 255, '1')
bw.save('captcha_thresholded.png')

उपरोक्त पायथन लिपि ब्लैक एंड व्हाइट मोड में कैप्चा को पढ़ेगी जो कि स्पष्ट और टेसरेक्ट को पास करना आसान होगा: -

pytesseract.image_to_string(bw)

उपरोक्त स्क्रिप्ट को चलाने के बाद हमें आउटपुट के रूप में पंजीकरण फॉर्म का कैप्चा मिलेगा।

यह अध्याय बताता है कि पायथन में वेब स्क्रेपर्स का उपयोग करके परीक्षण कैसे किया जाता है।

परिचय

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

पायथन का उपयोग करके परीक्षण

जब हम परीक्षण के बारे में बात कर रहे हैं, तो इसका मतलब इकाई परीक्षण है। पायथन के साथ परीक्षण में गहरा गोता लगाने से पहले, हमें इकाई परीक्षण के बारे में पता होना चाहिए। इकाई परीक्षण की कुछ विशेषताएं निम्नलिखित हैं -

  • प्रत्येक इकाई परीक्षण में घटक की कार्यक्षमता का कम से कम एक पहलू परखा जाएगा।

  • प्रत्येक इकाई परीक्षण स्वतंत्र है और स्वतंत्र रूप से भी चल सकता है।

  • यूनिट टेस्ट किसी अन्य परीक्षण की सफलता या विफलता में हस्तक्षेप नहीं करता है।

  • यूनिट परीक्षण किसी भी क्रम में चल सकते हैं और इनमें कम से कम एक अभिकथन होना चाहिए।

यूनीटेस्ट - पायथन मॉड्यूल

यूनिट परीक्षण के लिए यूनीटेस्ट नामक पायथन मॉड्यूल सभी मानक पायथन इंस्टॉलेशन के साथ आता है। हमें बस इसे आयात करने की आवश्यकता है और बाकी का काम unittest.TestCase class का कार्य है जो निम्नलिखित कार्य करेगा -

  • सेटअप और टियरडाउन फ़ंक्शंस unittest.TestCase क्लास द्वारा दिए गए हैं। ये कार्य प्रत्येक इकाई परीक्षण से पहले और बाद में चल सकते हैं।

  • यह परीक्षणों को पारित करने या विफल होने की अनुमति देने के लिए मुखर वक्तव्य भी प्रदान करता है।

  • It runs all the functions that begin with test_ as unit test.

Example

In this example we are going to combine web scraping with unittest. We will test Wikipedia page for searching string ‘Python’. It will basically do two tests, first weather the title page is same as the search string i.e.‘Python’ or not and second test makes sure that the page has a content div.

First, we will import the required Python modules. We are using BeautifulSoup for web scraping and of course unittest for testing.

from urllib.request import urlopen
from bs4 import BeautifulSoup
import unittest

Now we need to define a class which will extend unittest.TestCase. Global object bs would be shared between all tests. A unittest specified function setUpClass will accomplish it. Here we will define two functions, one for testing the title page and other for testing the page content.

class Test(unittest.TestCase):
   bs = None
   def setUpClass():
      url = '<a target="_blank" rel="nofollow" href="https://en.wikipedia.org/wiki/Python">https://en.wikipedia.org/wiki/Python'</a>
      Test.bs = BeautifulSoup(urlopen(url), 'html.parser')
   def test_titleText(self):
      pageTitle = Test.bs.find('h1').get_text()
      self.assertEqual('Python', pageTitle);
   def test_contentExists(self):
      content = Test.bs.find('div',{'id':'mw-content-text'})
      self.assertIsNotNone(content)
if __name__ == '__main__':
   unittest.main()

उपरोक्त स्क्रिप्ट को चलाने के बाद हमें निम्न आउटपुट मिलेंगे -

----------------------------------------------------------------------
Ran 2 tests in 2.773s

OK
An exception has occurred, use %tb to see the full traceback.

SystemExit: False

D:\ProgramData\lib\site-packages\IPython\core\interactiveshell.py:2870:
UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
 warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

सेलेनियम के साथ परीक्षण

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

उदाहरण

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

वेब ब्राउजर से कनेक्ट करने के लिए सबसे पहले, हम सेलेनियम मॉड्यूल से वेबड्राइवर आयात करेंगे -

from selenium import webdriver

अब, हमें सेलेनियम मॉड्यूल से कीज़ को आयात करने की आवश्यकता है।

from selenium.webdriver.common.keys import Keys

आगे हमें अपने फेसबुक अकाउंट में लॉगिन के लिए यूजरनेम और पासवर्ड देना होगा

user = "[email protected]"
pwd = ""

इसके बाद, Chrome के लिए वेब ड्राइवर को पथ प्रदान करें।

path = r'C:\\Users\\gaurav\\Desktop\\Chromedriver'
driver = webdriver.Chrome(executable_path=path)
driver.get("http://www.facebook.com")

अब हम मुखर खोजशब्द का उपयोग करके शर्तों को सत्यापित करेंगे।

assert "Facebook" in driver.title

निम्नलिखित कोड की मदद से हम ईमेल सेक्शन में मान भेज रहे हैं। यहां हम इसे इसकी आईडी से खोज रहे हैं लेकिन हम इसे नाम से भी खोज सकते हैंdriver.find_element_by_name("email")

element = driver.find_element_by_id("email")
element.send_keys(user)

निम्नलिखित कोड की मदद से हम पासवर्ड सेक्शन को मान भेज रहे हैं। यहां हम इसे इसकी आईडी से खोज रहे हैं लेकिन हम इसे नाम से भी खोज सकते हैंdriver.find_element_by_name("pass")

element = driver.find_element_by_id("pass")
element.send_keys(pwd)

ईमेल और पासवर्ड फ़ील्ड में मान डालने के बाद कोड की अगली पंक्ति का उपयोग एंटर / लॉगिन को दबाने के लिए किया जाता है।

element.send_keys(Keys.RETURN)

अब हम ब्राउज़र को बंद कर देंगे।

driver.close()

उपरोक्त स्क्रिप्ट को चलाने के बाद, क्रोम वेब ब्राउज़र खोला जाएगा और आप देख सकते हैं कि ईमेल और पासवर्ड डाला जा रहा है और लॉगिन बटन पर क्लिक किया जा रहा है।

तुलना: एकतरफा या सेलेनियम

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

उदाहरण के लिए, हम ऊपर दिए गए पायथन लिपि को फिर से लिख रहे हैं, फेसबुक लॉगिन के स्वचालन के लिए दोनों को निम्न प्रकार से जोड़कर -

import unittest
from selenium import webdriver

class InputFormsCheck(unittest.TestCase):
   def setUp(self):
      self.driver = webdriver.Chrome(r'C:\Users\gaurav\Desktop\chromedriver')
      def test_singleInputField(self):
      user = "[email protected]"
      pwd = ""
      pageUrl = "http://www.facebook.com"
      driver=self.driver
      driver.maximize_window()
      driver.get(pageUrl)
      assert "Facebook" in driver.title
      elem = driver.find_element_by_id("email")
      elem.send_keys(user)
      elem = driver.find_element_by_id("pass")
      elem.send_keys(pwd)
      elem.send_keys(Keys.RETURN)
   def tearDown(self):
      self.driver.close()
if __name__ == "__main__":
   unittest.main()