स्क्रेपी - मकड़ियों

विवरण

स्पाइडर एक वर्ग है जो एक वेबसाइट के माध्यम से लिंक का पालन करने और पृष्ठों से जानकारी निकालने के तरीके को परिभाषित करने के लिए जिम्मेदार है।

स्क्रेपी की डिफ़ॉल्ट मकड़ियों इस प्रकार हैं -

scrapy.Spider

यह एक मकड़ी है जिससे हर दूसरे मकड़ियों को विरासत में प्राप्त करना चाहिए। इसकी निम्न श्रेणी है -

class scrapy.spiders.Spider

निम्नांकित सारणी स्क्रैपी.स्पेडर वर्ग के क्षेत्रों को दर्शाती है -

अनु क्रमांक फ़ील्ड और विवरण
1

name

यह आपके मकड़ी का नाम है।

2

allowed_domains

यह उन डोमेन की एक सूची है जिस पर मकड़ी क्रॉल करती है।

3

start_urls

यह URL की एक सूची है, जो बाद में क्रॉल करने के लिए मूल होगी, जहां से मकड़ी रेंगना शुरू कर देगी।

4

custom_settings

ये सेटिंग्स हैं, जब मकड़ी चल रही है, तो प्रोजेक्ट वाइड कॉन्फ़िगरेशन से ओवरराइड किया जाएगा।

5

crawler

यह एक विशेषता है जो क्रॉलर ऑब्जेक्ट से लिंक करता है जिससे मकड़ी का उदाहरण बाध्य होता है।

6

settings

ये मकड़ी चलाने की सेटिंग हैं।

7

logger

यह एक पायथन लॉगर है जिसका उपयोग लॉग संदेश भेजने के लिए किया जाता है।

8

from_crawler(crawler,*args,**kwargs)

यह एक वर्ग विधि है, जो आपके मकड़ी का निर्माण करती है। पैरामीटर हैं -

  • crawler - एक क्रॉलर जिसके लिए मकड़ी का उदाहरण बाध्य होगा।

  • args(list)- ये तर्क विधि _init_ () के लिए दिए गए हैं

  • kwargs(dict)- ये कीवर्ड तर्क पद्धति _init_ () में पास किए जाते हैं

9

start_requests()

जब कोई विशेष URL निर्दिष्ट नहीं किया जाता है और स्पाइडर को स्क्रैपिंग के लिए खोला जाता है, तो Scrapy start_requests () विधि को कॉल करता है

10

make_requests_from_url(url)

यह urls को अनुरोधों में बदलने के लिए प्रयोग की जाने वाली विधि है।

1 1

parse(response)

यह विधि प्रतिक्रिया की प्रक्रिया करती है और अधिक URL के बाद डेटा को वापस ले जाती है।

12

log(message[,level,component])

यह एक विधि है जो मकड़ियों के लकड़हारे के माध्यम से लॉग संदेश भेजती है।

13

closed(reason)

मकड़ी के बंद होने पर इस विधि को कहा जाता है।

मकड़ी के तर्क

स्पाइडर तर्कों का उपयोग आरंभ URL को निर्दिष्ट करने के लिए किया जाता है और क्रॉल कमांड के साथ प्रयोग किया जाता है -a विकल्प, निम्नानुसार दिखाया गया है -

scrapy crawl first_scrapy -a group = accessories

निम्न कोड दर्शाता है कि एक मकड़ी कैसे तर्क प्राप्त करती है -

import scrapy 

class FirstSpider(scrapy.Spider): 
   name = "first" 
   
   def __init__(self, group = None, *args, **kwargs): 
      super(FirstSpider, self).__init__(*args, **kwargs) 
      self.start_urls = ["http://www.example.com/group/%s" % group]

सामान्य मकड़ियों

आप अपने मकड़ियों से उपवर्ग का उपयोग करने के लिए सामान्य मकड़ियों का उपयोग कर सकते हैं। उनका उद्देश्य सभी पृष्ठों से डेटा निकालने के लिए कुछ नियमों के आधार पर वेबसाइट पर सभी लिंक का पालन करना है।

निम्नलिखित मकड़ियों में उपयोग किए गए उदाहरणों के लिए, मान लें कि हमारे पास निम्नलिखित क्षेत्रों के साथ एक परियोजना है -

import scrapy 
from scrapy.item import Item, Field 
  
class First_scrapyItem(scrapy.Item): 
   product_title = Field() 
   product_link = Field() 
   product_description = Field()

CrawlSpider

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

class scrapy.spiders.CrawlSpider

क्रॉलस्पाइडर वर्ग की विशेषताएं निम्नलिखित हैं -

नियमों

यह नियम वस्तुओं की एक सूची है जो परिभाषित करती है कि क्रॉलर लिंक का अनुसरण कैसे करता है।

निम्न तालिका क्रॉल्स्पाइडर वर्ग के नियमों को दर्शाती है -

अनु क्रमांक नियम और विवरण
1

LinkExtractor

यह निर्दिष्ट करता है कि स्पाइडर लिंक का अनुसरण कैसे करता है और डेटा को निकालता है।

2

callback

यह प्रत्येक पृष्ठ के स्क्रैप होने के बाद कहा जाना है।

3

follow

यह निर्दिष्ट करता है कि निम्नलिखित लिंक जारी रखना है या नहीं।

parse_start_url (प्रतिक्रिया)

यह प्रारंभिक प्रतिक्रियाओं को पार्स करने की अनुमति देकर या तो वस्तु या अनुरोध वस्तु लौटाता है।

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

आइए निम्नलिखित उदाहरण पर एक नज़र डालें, जहां स्पाइडर ने डेक्सएक्सप्लम डॉट कॉम के होम पेज को क्रॉल करना शुरू कर दिया, सभी पेज, लिंक और पार्स को पार्स_इटीम्स विधि से इकट्ठा किया -

import scrapy
from scrapy.spiders import CrawlSpider, Rule
from scrapy.linkextractors import LinkExtractor

class DemoSpider(CrawlSpider):
   name = "demo"
   allowed_domains = ["www.demoexample.com"]
   start_urls = ["http://www.demoexample.com"]
      
   rules = ( 
      Rule(LinkExtractor(allow =(), restrict_xpaths = ("//div[@class = 'next']",)),
         callback = "parse_item", follow = True),
   )
   
   def parse_item(self, response):
      item = DemoItem()
      item["product_title"] = response.xpath("a/text()").extract()
      item["product_link"] = response.xpath("a/@href").extract()
      item["product_description"] = response.xpath("div[@class = 'desc']/text()").extract()
      return items

XMLFeedSpider

यह मकड़ियों के लिए आधार वर्ग है जो XML फीड से खुरचता है और नोड्स पर पुनरावृत्त होता है। इसकी निम्न श्रेणी है -

class scrapy.spiders.XMLFeedSpider

निम्न तालिका शोषक और एक टैग नाम सेट करने के लिए उपयोग की जाने वाली वर्ग विशेषताओं को दिखाती है -

अनु क्रमांक विशेषता और विवरण
1

iterator

यह उपयोग किए जाने वाले पुनरावृत्त को परिभाषित करता है। यह या तो iternodes, html या xml हो सकता है । डिफ़ॉल्ट इटर्नोड्स है

2

itertag

यह एक स्ट्रिंग है जिसमें नोड नाम से पुनरावृति होती है।

3

namespaces

इसे (उपसर्ग, यूरी) ट्यूपल्स की सूची द्वारा परिभाषित किया गया है जो स्वतः ही register_namespace () पद्धति का उपयोग करके नामस्थानों को पंजीकृत करता है

4

adapt_response(response)

यह प्रतिक्रिया प्राप्त करता है और स्पाइडर मिडलवेयर से आते ही रिस्पॉन्स बॉडी को संशोधित करता है, इससे पहले कि स्पाइडर इसे पार्स करना शुरू कर दे।

5

parse_node(response,selector)

यह प्रतिक्रिया और एक चयनकर्ता प्राप्त होता है जब प्रदान किए गए टैग नाम से मेल खाते प्रत्येक नोड के लिए कहा जाता है।

Note - यदि आप इस विधि को ओवरराइड नहीं करते हैं तो आपका मकड़ी काम नहीं करेगा।

6

process_results(response,results)

यह मकड़ी द्वारा लौटाए गए परिणामों और प्रतिक्रिया की सूची देता है।

CSVFeedSpider

यह अपनी प्रत्येक पंक्तियों के माध्यम से पुनरावृत्ति करता है, एक प्रतिक्रिया के रूप में एक CSV फ़ाइल प्राप्त करता है, और parse_row () विधि को कॉल करता है । इसकी निम्न श्रेणी है -

class scrapy.spiders.CSVFeedSpider

निम्न तालिका उन विकल्पों को दिखाती है जिन्हें CSV फ़ाइल के बारे में सेट किया जा सकता है -

अनु क्रमांक विकल्प और विवरण
1

delimiter

यह एक स्ट्रिंग है जिसमें प्रत्येक क्षेत्र के लिए अल्पविराम (',') विभाजक है।

2

quotechar

यह प्रत्येक क्षेत्र के लिए उद्धरण चिह्न ('' '') युक्त स्ट्रिंग है।

3

headers

यह उन कथनों की एक सूची है जहाँ से खेतों को निकाला जा सकता है।

4

parse_row(response,row)

यह हेडर के लिए एक कुंजी के साथ एक प्रतिक्रिया और प्रत्येक पंक्ति प्राप्त करता है।

CSVFeedSpider उदाहरण

from scrapy.spiders import CSVFeedSpider
from demoproject.items import DemoItem  

class DemoSpider(CSVFeedSpider): 
   name = "demo" 
   allowed_domains = ["www.demoexample.com"] 
   start_urls = ["http://www.demoexample.com/feed.csv"] 
   delimiter = ";" 
   quotechar = "'" 
   headers = ["product_title", "product_link", "product_description"]  
   
   def parse_row(self, response, row): 
      self.logger.info("This is row: %r", row)  
      item = DemoItem() 
      item["product_title"] = row["product_title"] 
      item["product_link"] = row["product_link"] 
      item["product_description"] = row["product_description"] 
      return item

SitemapSpider

SitemapSpider साइटमैप की मदद से robots.txt से URL का पता लगाकर एक वेबसाइट को क्रॉल करता है। इसकी निम्न श्रेणी है -

class scrapy.spiders.SitemapSpider

निम्न तालिका साइटमैप के क्षेत्रों को दर्शाती है -

अनु क्रमांक फ़ील्ड और विवरण
1

sitemap_urls

URL की एक सूची जिसे आप साइटमैप की ओर इशारा करते हुए क्रॉल करना चाहते हैं।

2

sitemap_rules

यह ट्यूपल्स (रेगेक्स, कॉलबैक) की एक सूची है, जहां रेगेक्स एक नियमित अभिव्यक्ति है, और कॉलबैक का उपयोग नियमित अभिव्यक्ति से मेल खाने वाले URL को संसाधित करने के लिए किया जाता है।

3

sitemap_follow

यह अनुसरण करने के लिए साइटमैप के रीगेक्स की एक सूची है।

4

sitemap_alternate_links

एकल url के लिए वैकल्पिक लिंक निर्दिष्ट करता है।

साइटमैप उदाहरण

निम्न साइटमैप सभी URL को संसाधित करता है -

from scrapy.spiders import SitemapSpider  

class DemoSpider(SitemapSpider): 
   urls = ["http://www.demoexample.com/sitemap.xml"]  
   
   def parse(self, response): 
      # You can scrap items here

निम्न साइटमैप कॉलबैक के साथ कुछ URL संसाधित करता है -

from scrapy.spiders import SitemapSpider  

class DemoSpider(SitemapSpider): 
   urls = ["http://www.demoexample.com/sitemap.xml"] 
   
   rules = [ 
      ("/item/", "parse_item"), 
      ("/group/", "parse_group"), 
   ]  
   
   def parse_item(self, response): 
      # you can scrap item here  
   
   def parse_group(self, response): 
      # you can scrap group here

निम्नलिखित कोड robots.txt में साइटमैप दिखाता है जिसका url है /sitemap_company -

from scrapy.spiders import SitemapSpider

class DemoSpider(SitemapSpider): 
   urls = ["http://www.demoexample.com/robots.txt"] 
   rules = [ 
      ("/company/", "parse_company"), 
   ] 
   sitemap_follow = ["/sitemap_company"]  
   
   def parse_company(self, response): 
      # you can scrap company here

आप निम्न कमांड में दिखाए गए अनुसार अन्य URL के साथ भी साइटमैप को जोड़ सकते हैं।

from scrapy.spiders import SitemapSpider  

class DemoSpider(SitemapSpider): 
   urls = ["http://www.demoexample.com/robots.txt"] 
   rules = [ 
      ("/company/", "parse_company"), 
   ]  
   
   other_urls = ["http://www.demoexample.com/contact-us"] 
   def start_requests(self): 
      requests = list(super(DemoSpider, self).start_requests()) 
      requests += [scrapy.Request(x, self.parse_other) for x in self.other_urls] 
      return requests 

   def parse_company(self, response): 
      # you can scrap company here... 

   def parse_other(self, response): 
      # you can scrap other here...