Logo of Scrapy.

5 आसान चरणों में Python + Scrapy का उपयोग करके वेबसाइट को कैसे परिमार्जन करें

हम आपके लिए निश्चित वेबसाइट पर किसी वेबसाइट को परिमार्जन कर सकते हैं! यदि आप रुचि रखते हैं, तो कृपया मुझसे संपर्क करें

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

स्कैपी: वेबसाइट से आपको आवश्यक डेटा निकालने के लिए एक खुला स्रोत और सहयोगी ढांचे एक तेज़, सरल, अभी तक एक्स्टेंसिबल तरीके से

परिचय

इस ट्यूटोरियल में हम वेबक्रैपर को केवल स्केरेपी + पायथन 3 (या पायथन 2) का उपयोग करेंगे और अब और नहीं! ट्यूटोरियल में दोनों पायथन 2 और पायथन 3 का समर्थन है। संभावनाएं अनंत हैं। सावधान रहें कि कुछ वेबस्केप कानूनी नहीं हैं! उदाहरण के लिए, हालांकि यह संभव है, इसे लिंक किए गए लिंक (https://www.linkedin.com/) को स्क्रैप करने के लिए स्क्रेपी या किसी अन्य वेबस्क्रैपर का उपयोग करने की अनुमति नहीं है। हालांकि, 2017 में एक मामले में लिंक्डइन खो गया

सामग्री + लिंक चिमटा

स्कैपी का उद्देश्य एक वेबसाइट से सामग्री और लिंक निकालने है। यह दिए गए वेबसाइट पर सभी लिंक्स को पुन: क्रमबद्ध करके किया जाता है।

चरण 1: स्क्रेपिंग इंस्टॉल करना

स्क्रेपी की वेबसाइट के अनुसार, हमें स्कैरी को स्थापित करने के लिए निम्नलिखित कमांड निष्पादित करना है:

pip install scrapy

चरण 2: परियोजना की स्थापना

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

scrapy startproject datablogger_scraper

चरण 3: एक वस्तु बनाना

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

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

ऑब्जेक्ट items.py में और इस प्रोजेक्ट के लिए परिभाषित है, items.py में निम्न सामग्री है:

import scrapy

class DatabloggerScraperItem(scrapy.Item):
    # The source URL
    url_from = scrapy.Field()
    # The destination URL
    url_to = scrapy.Field()

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

चरण 4: स्पाइडर बनाना

अब हमने एक वस्तु में डेटा को समझाया है, हम मकड़ी का निर्माण शुरू कर सकते हैं। सबसे पहले, हम परियोजना फ़ोल्डर के लिए नेविगेट करेंगे। उसके बाद, हम मकड़ी बनाने के लिए निम्न आदेश निष्पादित करेंगे (जो फिर मकड़ियों / निर्देशिका में पाई जा सकती हैं):

scrapy genspider datablogger data-blogger.com 

स्पाइडर कार्यान्वयन

अब, एक मकड़ी बनाई गई है (मकड़ियों / डाटाबेसोगाइजर)। आप जितनी चाहें उतनी ही इस फ़ाइल को कस्टमाइज़ कर सकते हैं मैं निम्नलिखित कोड के साथ समाप्त हुआ:

# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractor import LinkExtractor
from scrapy.spiders import Rule, CrawlSpider
from datablogger_scraper.items import DatabloggerScraperItem


class DatabloggerSpider(CrawlSpider):
    # The name of the spider
    name = "datablogger"

    # The domains that are allowed (links to other domains are skipped)
    allowed_domains = ["data-blogger.com"]

    # The URLs to start with
    start_urls = ["https://www.data-blogger.com/"]

    # This spider has one rule: extract all (unique and canonicalized) links, follow them and parse them using the parse_items method
    rules = [
        Rule(
            LinkExtractor(
                canonicalize=True,
                unique=True
            ),
            follow=True,
            callback="parse_items"
        )
    ]

    # Method which starts the requests by visiting all URLs specified in start_urls
    def start_requests(self):
        for url in self.start_urls:
            yield scrapy.Request(url, callback=self.parse, dont_filter=True)

    # Method for parsing items
    def parse_items(self, response):
        # The list of items that are found on the particular page
        items = []
        # Only extract canonicalized and unique links (with respect to the current page)
        links = LinkExtractor(canonicalize=True, unique=True).extract_links(response)
        # Now go through all the found links
        for link in links:
            # Check whether the domain of the URL of the link is allowed; so whether it is in one of the allowed domains
            is_allowed = False
            for allowed_domain in self.allowed_domains:
                if allowed_domain in link.url:
                    is_allowed = True
            # If it is allowed, create a new item and add it to the list of found items
            if is_allowed:
                item = DatabloggerScraperItem()
                item['url_from'] = response.url
                item['url_to'] = link.url
                items.append(item)
        # Return all the found items
        return items

कुछ चीजें उल्लेख के लायक हैं क्रॉलर CrawlSpider ऑब्जेक्ट का विस्तार करता है, जिसमें एक वेबसाइट को बार-बार स्क्रैप करने के लिए एक पार्स विधि होती है कोड में, एक नियम परिभाषित किया गया है। यह नियम क्रॉलर को उन सभी लिंक्स का पालन करने के लिए कहता है जो इसे मुठभेड़ करते हैं। नियम यह भी निर्दिष्ट करता है कि केवल अद्वितीय लिंक पार्स किए जाते हैं, इसलिए लिंक में से कोई भी दो बार पार्स नहीं किया जाएगा! इसके अलावा, canonicalize संपत्ति सुनिश्चित करता है कि लिंक दो बार नहीं पार्स नहीं हैं

LinkExtractor

लिंकएक्ट्राक्टर वेब पेज से लिंक निकालने के उद्देश्य से एक मॉड्यूल है

चरण 5: स्पाइडर को निष्पादित करना

अपने प्रोजेक्ट के रूट फ़ोल्डर पर जाएं फिर निम्न कमांड निष्पादित करें:

scrapy crawl datablogger -o links.csv -t csv

यह कमांड तब आपकी वेबसाइट पर चलता है और डेटा को स्टोर करने के लिए एक सीएसवी फ़ाइल बनाता है। मेरे मामले में, मुझे निम्न सामग्री के साथ links.csv नामक एक CSV फ़ाइल मिली है:

url_from,url_to
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/category/cern/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,http://www.data-blogger.com/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/category/data-science/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/category/software-science/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/category/mathematics/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/category/projects/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/category/competition/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/about-me/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/contact/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/hire-me/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/author/admin/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.facebook.com/sharer/sharer.php?t=Monitoring+your+cluster+in+just+a+few+minutes+using+ISA&u=https%3A%2F%2Fwww.data-blogger.com%2F2016%2F07%2F18%2Fmonitoring-your-cluster-in-just-a-few-minutes%2F
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://twitter.com/intent/tweet?text=Monitoring+your+cluster+in+just+a+few+minutes+using+ISA&url=https%3A%2F%2Fwww.data-blogger.com%2F2016%2F07%2F18%2Fmonitoring-your-cluster-in-just-a-few-minutes%2F
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://plus.google.com/share?url=https%3A%2F%2Fwww.data-blogger.com%2F2016%2F07%2F18%2Fmonitoring-your-cluster-in-just-a-few-minutes%2F
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/tag/cluster/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/tag/isa/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/tag/monitoring/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/tag/software/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/2016/07/17/cern-deel-3-trip-naar-zurich/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/2016/07/19/project-euler-using-scala-problem-1/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/2016/08/13/apache-flink-the-next-distributed-data-processing-revolution/
https://www.data-blogger.com/2016/07/18/monitoring-your-cluster-in-just-a-few-minutes/,https://www.data-blogger.com/2016/07/24/summing-the-fibonacci-sequence/
https://www.data-blogger.com/2016/07/17/why-scala/,https://www.data-blogger.com/2016/07/17/why-scala/
https://www.data-blogger.com/2016/07/17/why-scala/,https://www.data-blogger.com/
...

निष्कर्ष

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