स्क्रेपी - मकड़ियों
विवरण
स्पाइडर एक वर्ग है जो एक वेबसाइट के माध्यम से लिंक का पालन करने और पृष्ठों से जानकारी निकालने के तरीके को परिभाषित करने के लिए जिम्मेदार है।
स्क्रेपी की डिफ़ॉल्ट मकड़ियों इस प्रकार हैं -
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) यह एक वर्ग विधि है, जो आपके मकड़ी का निर्माण करती है। पैरामीटर हैं -
|
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...