Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

मैकेनाइज के साथ उन्नत वेब स्क्रैपिंग: फॉर्म्स, लिंक्स और पेजिनेशन में महारत हासिल करना

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

विषय

  • सिंगल पेज बनाम पेजिनेशन
  • मैकेनाइज
  • एजेंट
  • पेज
  • नोकोगिरी मेथड्स
  • लिंक्स
  • क्लिक
  • फॉर्म्स

सिंगल पेज बनाम पेजिनेशन

अब तक हमने नोकोगिरी का उपयोग करके एक सिंगल पेज की स्क्रीन को स्क्रैप करने का तरीका जानने में कुछ समय बिताया है। ये कई पेजों से कंटेंट निकालने के लिए एक कदम आगे बढ़ने का एक अच्छा आधार था।

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

यहीं नोकोगिरी रुक जाती है और एक और उपयोगी जेम जिसे मैकेनाइज कहा जाता है, खेल में आता है।

मैकेनाइज

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

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

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

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

मैकेनाइज एजेंट को इंस्टेंटिएट करना

इससे पहले कि हम चीजों को मैकेनाइज करना शुरू कर सकें, हमें एक मैकेनाइज एजेंट को इंस्टेंटिएट करने की आवश्यकता है।

some_scraper.rb

ये एजेंट एक पेज लाने के लिए उपयोग किया जाएगा, जैसा हमने नोकोगिरी के साथ किया था।

some_scraper.rb

यहां जो होता है वह यह है कि मैकेनाइज एजेंट को पॉडकास्ट पेज और इसकी कुकीज़ मिल गईं।

पेज कंटेंट निकालना

अब हमारे पास एक पेज है जो निष्कर्षण के लिए तैयार है। इससे पहले कि हम ऐसा करें, मैं सलाह देता हूं कि हम inspect मेथड का उपयोग करके हुड के नीचे एक नज़र डालें।

some_scraper.rb

आउटपुट काफी ठोस है। एक नज़र डालें और खुद देखें कि Mechanize::Page ऑब्जेक्ट में क्या होता है। यहां आप उस पेज के सभी एट्रिब्यूट्स देख सकते हैं।

मेरे लिए, ये आपके द्वारा निकाले जाने वाले डेटा को स्लाइस करने के लिए एक वास्तव में आसान ऑब्जेक्ट है।

आउटपुट

अगर आप HTML पेज को स्वयं देखना चाहते हैं, तो आप body या content मेथड्स को टैग कर सकते हैं।

some_scraper.rb

आउटपुट

चूंकि इस पॉडकास्ट में पेज पर केवल कुछ अलग एलिमेंट्स हैं, यहां github.com से लौटाया गया Mechanize::Page है। इसमें देखने के लिए कंटेंट की एक बड़ी विविधता है। मुझे लगता है कि इसके लिए एक फील पाने के लिए ये महत्वपूर्ण है।

आउटपुट github.com

पॉडकास्ट पर वापस, आप एन्कोडिंग्स, HTTP प्रतिक्रिया कोड, URI, या प्रतिक्रिया हेडर्स जैसी चीजों को भी देख सकते हैं।

some_scraper.rb

आउटपुट

अगर आप गहराई से जाना चाहते हैं तो और भी बहुत कुछ है। मैं इसे यहीं छोड़ दूंगा।

नोकोगिरी मेथड्स

  • at
  • search

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

उदाहरण के लिए, यदि आप एक सिंगल ऑब्जेक्ट खोजना चाहते हैं, तो आप at का उपयोग कर सकते हैं, जबकि search एक विशेष पेज पर एक सेलेक्टर से मेल खाने वाले सभी ऑब्जेक्ट्स को लौटाता है। इसे दोबारा कहें, तो ये मेथड्स नोकोगिरी डॉक्यूमेंट ऑब्जेक्ट्स और मैकेनाइज पेज ऑब्जेक्ट्स दोनों पर काम करेंगे।

some_scraper.rb

आउटपुट

लिंक्स

  • links
  • link_with
  • links_with

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

some_scraper.rb

आउटपुट

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

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

स्क्रीनशॉट

मैकेनाइज के साथ उन्नत वेब स्क्रैपिंग: फॉर्म्स, लिंक्स और पेजिनेशन में महारत हासिल करना मैकेनाइज के साथ उन्नत वेब स्क्रैपिंग: फॉर्म्स, लिंक्स और पेजिनेशन में महारत हासिल करना मैकेनाइज के साथ उन्नत वेब स्क्रैपिंग: फॉर्म्स, लिंक्स और पेजिनेशन में महारत हासिल करना

हमेशा की तरह, हम उससे सिर्फ टेक्स्ट भी निकाल सकते हैं।

some_scraper.rb

आउटपुट

इन सभी लिंक्स को बल्क में प्राप्त करना बहुत उपयोगी या बस थकाऊ हो सकता है। सौभाग्य से हमारे लिए, हमारे पास जो चाहिए उसे ठीक करने के लिए कुछ टूल्स मौजूद हैं।

some_scraper.rb

आउटपुट

बूम! अब हम कहीं पहुंच रहे हैं! हम इस तरह विशिष्ट लिंक्स पर ज़ूम इन कर सकते हैं। हम एक अच्छे API जैसे links_with या link_with के साथ एक निश्चित मानदंड से मेल खाने वाले लिंक्स को लक्षित कर सकते हैं - जैसे इसका टेक्स्ट, उदाहरण के लिए। साथ ही, अगर हमारे पास कई Focus लिंक्स हैं, तो हम ब्रैकेट्स [] का उपयोग करके पेज पर एक विशेष नंबर पर ज़ूम इन कर सकते हैं।

some_scraper.rb

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

some_scraper.rb

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

some_scraper.rb

उस साथी का पीछा करने और यह देखने के बारे में क्या कि इस Focus लिंक के पीछे क्या छिपा है? आइए इसे क्लिक करें!

क्लिक

some_scraper.rb

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

मान लीजिए मेरे पास एक ही इंटरव्यूई के दो टेक्स्ट लिंक्स हैं - एक जो टैग्स से लिंक करता है और एक हाल के एपिसोड से - और मैं इनमें से प्रत्येक पेज से लिंक्स प्राप्त करना चाहता हूं।

some_scraper.rb

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

some_scraper.rb

फॉर्म्स

  • submit
  • field_with
  • checkbox_with
  • radiobuttons_with
  • file_uploads

आइए फॉर्म्स पर एक नज़र डालते हैं!

some_scraper.rb

आउटपुट

क्योंकि हम forms मेथड का उपयोग करते हैं, हमें एक सरणी वापस मिलती है - भले ही हमारे पास केवल एक फॉर्म वापस आया हो। अब जब हम जानते हैं कि फॉर्म का नाम "f" है, तो हम उस पर ध्यान केंद्रित करने के लिए एकवचन संस्करण form का उपयोग कर सकते हैं।

some_scraper.rb

form('f') का उपयोग करके, हम उस विशेष फॉर्म को चुनते हैं जिसके साथ हम काम करना चाहते हैं। परिणामस्वरूप, हमें एक सरणी वापस नहीं मिलेगी।

आउटपुट

हम टेक्स्ट इनपुट फील्ड के नाम (q) की पहचान भी कर सकते हैं।

हम इसे उस नाम से लक्षित कर सकते हैं और इसके मान को रूबी एट्रिब्यूट्स की तरह सेट कर सकते हैं। हमें बस इसे एक नया मान प्रदान करने की आवश्यकता है। आप ऊपर के आउटपुट उदाहरण से देख सकते हैं कि यह डिफ़ॉल्ट रूप से खाली है।

some_scraper.rb

आउटपुट

जैसा कि आप ऊपर देख सकते हैं, टेक्स्ट फील्ड का मान New Google Search में बदल गया है। अब हमें केवल फॉर्म को सबमिट करने और उस पेज से परिणाम एकत्र करने की आवश्यकता है जो गूगल लौटाता है। ये इससे आसान नहीं हो सकता। आइए इस बार कुछ और खोजते हैं!

some_scraper.rb

यहां मैंने CSS सेलेक्टर h3.r का उपयोग करके खोज परिणाम हेडर की पहचान की, इसके text को मैप किया, और परिणामों को प्रिटी प्रिंट किया। ये इतना कठिन नहीं था, है ना? ये एक आसान उदाहरण है, निश्चित रूप से, लेकिन उन अंतहीन संभावनाओं के बारे में सोचें जो आपके पास इस टूल के साथ हैं!

आउटपुट

मैकेनाइज में आपके लिए खेलने के लिए विभिन्न इनपुट फील्ड्स उपलब्ध हैं। आप फाइल्स भी अपलोड कर सकते हैं!

  • field_with
  • checkbox_with
  • radiobuttons_with
  • file_uploads

आप उनके नाम से रेडियो बटन्स और चेकबॉक्स की पहचान भी कर सकते हैं और उन्हें - आपने अनुमान लगाया - चेक के साथ चेक कर सकते हैं।

some_scraper.rb

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

some_scraper.rb

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

some_scraper.rb

अंतिम विचार

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

मुझे आशा है कि आप देख सकते हैं कि ये जेम कितना खूबसूरती से सरल है और कितनी शक्ति प्रदान करता है। जैसा कि हम अब लोकप्रिय संस्कृति से जानते हैं, ये जिम्मेदारियां भी वहन करता है। इसका उपयोग कानूनी ढांचे के भीतर करें और जब आपके पास API तक पहुंच न हो। आपको शायद इन टूल्स का बार-बार उपयोग न हो, लेकिन जब आपके आगे कुछ वास्तविक स्क्रैपिंग आवश्यकताएं हों तो ये बहुत काम आते हैं।

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

  1. बेहतर सुरक्षा और परफॉरमेंस के लिए अपने iPhone ब्राउज़र को कैसे अपडेट करें बेहतर सुरक्षा और परफॉरमेंस के लिए अपने iPhone ब्राउज़र को कैसे अपडेट करें

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

  1. फायरफॉक्स में  एक वेब पेज आपके ब्राउज़र को धीमा कर रहा है  त्रुटि को ठीक करें फायरफॉक्स में 'एक वेब पेज आपके ब्राउज़र को धीमा कर रहा है' त्रुटि को ठीक करें

    क्या आप फायरफॉक्स पर एक वेब पेज आपके ब्राउज़र को धीमा कर रहा है, आप क्या करना चाहेंगे? इसे रोकें या प्रतीक्षा करें। संदेश से परेशान हैं? यह फायरफॉक्स पर ब्राउज़िंग करते समय आने वाले सबसे आम त्रुटि संदेशों में से एक है। कई उपयोगकर्ताओं ने बताया है कि जब वे किसी वेबपेज पर जाने का प्रयास करते हैं तो यह

  1. आपका ब्राउज़र वास्तव में कितना निजी होना चाहिए? प्रमुख कारक और सुझाव आपका ब्राउज़र वास्तव में कितना निजी होना चाहिए? प्रमुख कारक और सुझाव

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