जवाबों:
विकल्प crawl
का उपयोग करके कमांड में स्पाइडर तर्क पारित किए जाते हैं -a
। उदाहरण के लिए:
scrapy crawl myspider -a category=electronics -a domain=system
मकड़ियों को तर्कों के रूप में एक्सेस कर सकते हैं:
class MySpider(scrapy.Spider):
name = 'myspider'
def __init__(self, category='', **kwargs):
self.start_urls = [f'http://www.example.com/{category}'] # py36
super().__init__(**kwargs) # python3
def parse(self, response)
self.log(self.domain) # system
स्क्रेपी डॉक्टर से लिया गया: http://doc.scrapy.org/en/latest/topics/spiders.html#spider-arguments
अद्यतन 2013 : दूसरा तर्क जोड़ें
अद्यतन २०१५ : शब्दों को समायोजित करें
अपडेट २०१६ : नए बेस क्लास का उपयोग करें और सुपर जोड़ें, धन्यवाद @ बिरला
अपडेट 2017 : पायथन 3 सुपर का उपयोग करें
# previously
super(MySpider, self).__init__(**kwargs) # python2
अपडेट 2018 : जैसा कि @eLRuLL बताते हैं , मकड़ियों तर्कों को विशेषताओं के रूप में एक्सेस कर सकते हैं
self.domain
, तो मैं अभी भी इसे __init__
विधि के बाहर एक्सेस नहीं कर पा रहा हूं । अजगर एक परिभाषित त्रुटि नहीं फेंकता है। BTW, आपने super
कॉल क्यों छोड़ा है ? पुनश्च। मैं CrawlSpider वर्ग के साथ काम कर रहा हूँ
__init__
एक विधि है। इसके कार्यान्वयन से मकड़ी खुद को कम मजबूत नहीं बनाती है और यह जवाब देने के लिए शामिल है कि आप कीवर्ड तर्क के लिए चूक की घोषणा कर सकते हैं, लेकिन जैसा कि आपने कहा कि यह वैकल्पिक है। जैसा कि हमने पिछले वर्ष बताया था कि आपको उपयोग करने की आवश्यकता नहीं है, getattr
आप केवल तर्कों को एक्सेस कर सकते हैं, उदाहरण के लिए self.category
या जैसा कि हम उत्तर में देखते हैंself.domain
पिछले उत्तर सही थे, लेकिन आपको कंस्ट्रक्टर को घोषित करने की आवश्यकता नहीं है ( __init__
) हर बार जब आप एक स्क्रैप स्पाइडर को कोड करना चाहते हैं, तो आप पहले की तरह पैरामीटर निर्दिष्ट कर सकते हैं:
scrapy crawl myspider -a parameter1=value1 -a parameter2=value2
और अपने मकड़ी कोड में आप बस मकड़ी के तर्कों के रूप में उनका उपयोग कर सकते हैं:
class MySpider(Spider):
name = 'myspider'
...
def parse(self, response):
...
if self.parameter1 == value1:
# this is True
# or also
if getattr(self, parameter2) == value2:
# this is also True
और यह सिर्फ काम करता है।
क्रॉल कमांड के साथ तर्क पारित करने के लिए
मैला-कुचैला क्रॉल myspider -a श्रेणी = 'mycategory' -a डोमेन = 'example.com'
Scrapyd पर चलाने के लिए की जगह तर्क पास करने के लिए -एक साथ -d
curl http://your.ip.address.here:port/schedule.json -d spider = myspider -d श्रेणी = 'mycategory' -d डोमेन = 'example.com'
मकड़ी को इसके निर्माता में तर्क प्राप्त होंगे।
class MySpider(Spider):
name="myspider"
def __init__(self,category='',domain='', *args,**kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.category = category
self.domain = domain
Scrapy मकड़ी विशेषताओं के रूप में सभी तर्कों डालता है और आप को छोड़ सकते हैं init विधि पूरी तरह से। उन विशेषताओं को प्राप्त करने के लिए बटरेट विधि का उपयोग करें ताकि आपका कोड न टूटे ।
class MySpider(Spider):
name="myspider"
start_urls = ('https://httpbin.org/ip',)
def parse(self,response):
print getattr(self,'category','')
print getattr(self,'domain','')
-A विकल्प का उपयोग करके क्रॉल कमांड चलाते समय स्पाइडर तर्क पारित किए जाते हैं। उदाहरण के लिए अगर मैं अपने मकड़ी के तर्क के रूप में एक डोमेन नाम पास करना चाहता हूं तो मैं यह करूंगा-
मैला-कुचैला क्रॉल myspider -a डोमेन = "http://www.example.com"
और मकड़ी के निर्माणकर्ताओं में तर्क प्राप्त करें:
class MySpider(BaseSpider):
name = 'myspider'
def __init__(self, domain='', *args, **kwargs):
super(MySpider, self).__init__(*args, **kwargs)
self.start_urls = [domain]
#
...
यह काम करेगा :)
वैकल्पिक रूप से हम ScrapyD का उपयोग कर सकते हैं जो एक एपीआई को उजागर करता है जहां हम start_url और स्पाइडर नाम पारित कर सकते हैं। स्क्रेपीडी में मकड़ियों को रोकने / शुरू करने / स्थिति / सूची बनाने के लिए एपीआई है।
pip install scrapyd scrapyd-deploy
scrapyd
scrapyd-deploy local -p default
scrapyd-deploy
अंडे के रूप में मकड़ी को डेमॉन में तैनात करेगा और यहां तक कि यह मकड़ी के संस्करण को बनाए रखेगा। मकड़ी को शुरू करते समय आप बता सकते हैं कि मकड़ी के किस संस्करण का उपयोग करना है।
class MySpider(CrawlSpider):
def __init__(self, start_urls, *args, **kwargs):
self.start_urls = start_urls.split('|')
super().__init__(*args, **kwargs)
name = testspider
curl http://localhost:6800/schedule.json -d project=default -d spider=testspider -d start_urls="https://www.anyurl...|https://www.anyurl2"
अतिरिक्त लाभ यह है कि आप अपने स्वयं के UI का निर्माण उपयोगकर्ता से url और अन्य पैरामेट्स को स्वीकार करने के लिए कर सकते हैं और उपरोक्त स्क्रैपबुक शेड्यूल लिंक का उपयोग करके किसी कार्य को शेड्यूल कर सकते हैं
देखें scrapyd API दस्तावेज़ अधिक जानकारी के लिए