2013-03-25 14 views

risposta

111

Gli argomenti dello spider vengono passati nel comando di ricerca per indicizzazione mediante l'opzione -a. Per esempio:

scrapy crawl myspider -a category=electronics -a domain=system 

ragni possono accedere gli argomenti nelle loro inizializzatori:

class MySpider(scrapy.Spider): 
    name = 'myspider' 

    def __init__(self, category='', **kwargs): 
     self.start_urls = ['http://www.example.com/category/%s' % category] 
     super().__init__(**kwargs) # python3 
     self.log(self.domain) # system 

Tratto da doc Scrapy: http://doc.scrapy.org/en/latest/topics/spiders.html#spider-arguments

Aggiornamento 2013: Aggiungere secondo argomento

Aggiornamento 2015: modifica la dicitura

Aggiornamento 2016: Utilizzare più recente classe di base e aggiungere super, grazie @Birla

Aggiornamento 2017: Usa python3 eccellente

# previously 
super(MySpider, self).__init__(**kwargs) # python2 
+0

Hey, grazie per la risposta. Ma Diciamo che voglio passare due argomenti, dovrei usare qualcosa come: Scrapy crawl myspider -a Categoria = elettronica domain = sistema o Scrapy crawl myspider -a Categoria = elettronica -a domain = sistema –

+3

scrapy crawl myspider -a category = elettronica -a dominio = sistema –

+0

Il codice sopra riportato funziona solo parzialmente per me. Per es. Se definisco il dominio usando 'self.domain', non riesco ancora ad accedervi al di fuori del metodo' __init__'. Python genera un errore non definito. A proposito, perché hai omesso la chiamata "super"? PS. Sto lavorando con la classe CrawlSpider – Birla

3

per passare argomenti con il comando crawl

scrapy crawl myspider -a category = 'mycategory' -a dominio = 'example.com'

passare gli argomenti per l'esecuzione su scrapyd sostituire -a con -d

ricciolo http://your.ip.address.here:port/schedule.json -d ragno = myspider categoria -d = 'MyCategory' dominio -d = 'esempio. com '

Lo spider riceverà argomenti nel suo costruttore.


class MySpider(Spider): 
    name="myspider" 
    def __init__(self,category='',domain='', *args,**kwargs): 
     super(MySpider, self).__init__(*args, **kwargs) 
     self.category = category 
     self.domain = domain
6

argomenti Spider sono passati durante l'esecuzione del comando di scansione utilizzando l'opzione -a. Per esempio se voglio passare un nome di dominio come argomento al mio ragno poi farò questo-

Scrapy crawl myspider -a domain = "http://www.example.com"

E ricevi argomenti nei costruttori di spider:

class MySpider(BaseSpider): 
    name = 'myspider' 
    def __init__(self, domain='', *args, **kwargs): 
     super(MySpider, self).__init__(*args, **kwargs) 
     self.start_urls = [domain] 
     # 

...

funzionerà :)

6

risposte precedenti erano corrette, ma non c'è bisogno di dichiarare il costruttore (__init__) ogni volta che si desidera codificare ragno di uno Scrapy, si può solo specificare i parametri come prima:

scrapy crawl myspider -a parameter1=value1 -a parameter2=value2 

e nel codice di ragno si può semplicemente utilizzare come argomenti ragno:

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 

e funziona solo.

Problemi correlati