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

मास्टर मैकेनाइज़: उन्नत वेब स्क्रैपिंग तकनीकें - भाग 2

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

विषय

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

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

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

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

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

मैकेनाइज़

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

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

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

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

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

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

some_scraper.rb

इस agent का उपयोग पेज को फेच करने के लिए किया जाएगा, जैसा हमने नोकोगिरी के साथ किया था।

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

आउटपुट

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

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

स्क्रीनशॉट

मास्टर मैकेनाइज़: उन्नत वेब स्क्रैपिंग तकनीकें - भाग 2मास्टर मैकेनाइज़: उन्नत वेब स्क्रैपिंग तकनीकें - भाग 2मास्टर मैकेनाइज़: उन्नत वेब स्क्रैपिंग तकनीकें - भाग 2

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

some_scraper.rb

आउटपुट

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

some_scraper.rb

आउटपुट

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

some_scraper.rb

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

some_scraper.rb

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

some_scraper.rb

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

क्लिक

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 में बदल गया है। अब हमें केवल फॉर्म को submit करने और गूगल द्वारा लौटाए गए पेज से परिणाम एकत्र करने की आवश्यकता है। यह इससे आसान नहीं हो सकता। आइए इस बार कुछ और खोजें!

some_scraper.rb

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

आउटपुट

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

  • field_with
  • checkbox_with
  • radiobuttons_with
  • file_uploads

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

some_scraper.rb

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

some_scraper.rb

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

some_scraper.rb

अंतिम विचार

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

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

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

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

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

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

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

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

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