2016-05-11 9 views
1

Ich Parsing eine Liste von URLs, und ich möchte vermeiden, einige URL-Ergebnis unter der Bedingung einige seiner Wert zu speichern. Mein Code ist so etwas wie dieses:Scrapy: Wie verhindere ich eine Yield Anfrage mit einem bedingten Wert?

start_urls = [www.rootpage.com] 
def parse(self,response): 
    item = CreatedItem() 
    url_list = response.xpath('somepath').extract() 
    for url in url_list: 
     request = scrapy.Request(item['url'],callback=self.parse_article) 
     request.meta['item'] = item 
     yield request 

def parse_article(self,response): 
    item = response.meta['item'] 
    item['parameterA'] = response.xpath('somepath').extract() 
    yield item 

Jetzt möchte ich, dass im Falle item [ ‚ParameterA‘] folgt eine Bedingung, gibt es keine Notwendigkeit zu „yield Anforderung“ (so dass keine Einsparung für diese URL auftritt). Ich habe versucht, ein bedingter wie hinzufügen:

if item['parameterA'] == 0: 
     continue 
    else: 
     yield item 

aber wie erwartet es nicht funktioniert, weil scrapy die Schleife wird fortgesetzt, noch bevor die Anforderung durchgeführt wird.

+0

Warten Sie, aber die einzige Möglichkeit, den 'ParameterA' zu erhalten, besteht darin, eine Anfrage zu stellen? – alecxe

+0

Ja, weil ich "sehen" muss, was unter dieser URL ist, entscheide ich, ob ich es speichere oder nicht. – Miguel

Antwort

1

Von dem, was ich verstehen, sollten Sie die Entscheidung innerhalb der parse_article Methode machen:

def parse_article(self,response): 
    item = response.meta['item'] 
    item['parameterA'] = response.xpath('somepath').extract_first() 

    if item['parameterA'] != "0": 
     yield item 

Beachten Sie die Verwendung des extract_first() und die Anführungszeichen um 0.

+0

Oh, natürlich! Vielen Dank! – Miguel