2016-04-22 3 views
0

Je suis en train de gratter deux pages pour un seul identifiant itérativement. Le premier grattoir fonctionne pour tous les identifiants mais le second fonctionne pour un seul identifiant.Scrapy gratte une page 'n' fois, mais une seule fois en boucle

class MySpider(scrapy.Spider): 
    name = "scraper" 
    allowed_domains = ["example.com"] 
    start_urls = ['http://example.com/viewData'] 

    def parse(self, response): 
    ids = ['1', '2', '3'] 

    for id in ids: 
     # The following method scraps for all id's 
     yield scrapy.Form.Request.from_response(response, 
                ... 
               callback=self.parse1) 

     # The following method scrapes only for 1st id 
     yield Request(url="http://example.com/viewSomeOtherData", 
        callback=self.intermediateMethod) 

    def parse1(self, response): 
    # Data scraped here using selectors 

    def intermediateMethod(self, response): 
    yield scrapy.FormRequest.from_response(response, 
               ... 
              callback=self.parse2) 

    def parse2(self, response): 
    # Some other data scraped here 

Je souhaite supprimer deux pages différentes pour un seul ID.

+1

Scrapy a un filtre URL dupliqué, il est possible que ce soit le filtrage de votre demande. Essayez d'ajouter 'dont_filter = True' après le' callback = '. – Steve

+0

Merci beaucoup. L'ajout de dont_filter a résolu mon problème. –

Répondre

0

Modification de la ligne suivante:

yield Request(url="http://example.com/viewSomeOtherData", 
       callback=self.intermediateMethod) 

à:

yield Request(url="http://example.com/viewSomeOtherData", 
       callback=self.intermediateMethod, 
       dont_filter=True) 

a fonctionné pour moi.

Scrapy a un filtre URL dupliqué, il est possible que ce soit le filtrage de votre demande. Essayez d'ajouter dont_filter = True après le rappel comme suggéré par Steve.