2016-04-22 10 views
0

Ich kratze zwei Seiten für eine einzelne ID iterativ. Der erste Scraper funktioniert für alle IDs, aber der zweite funktioniert nur für eine ID.Scrapy kratzt eine Seite 'n' mal aber andere einzelne Zeit wenn in einer Schleife

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 

Ich möchte zwei verschiedene Seiten für eine einzelne ID ausrangieren.

+1

Scrapy hat einen doppelten URL-Filter, es ist möglich, dass Ihre Anfrage gefiltert wird. Versuchen Sie, 'dont_filter = True 'nach' callback = 'hinzuzufügen. – Steve

+0

Vielen Dank. Das Hinzufügen von dont_filter hat mein Problem gelöst. –

Antwort

0

Ändern Sie die folgende Zeile:

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

zu:

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

für mich gearbeitet.

Scrapy hat einen doppelten URL-Filter, es ist möglich, dass Ihre Anfrage gefiltert wird. Versuchen Sie, dont_filter = True nach dem Rückruf hinzuzufügen, wie von Steve vorgeschlagen.