In meiner Analyse-Methode möchte ich 3 Methoden aus einer SpiderClass aufrufen, die ich erben. Zuerst möchte ich die XPaths parsen, dann die Daten bereinigen, dann die Daten einer Item-Instanz zuweisen und sie der Pipeline übergeben.Scrapy/Python - Ausführen mehrerer Erträge
Ich werde es mit wenig Code versuchen und einfach nach den Prinzipien fragen: cleanData
und assignProductValues
werden nie genannt - warum?
def parse(self, response):
for href in response.xpath("//a[@class='product--title']/@href"):
url = href.extract()
yield scrapy.Request(url, callback=super(MyclassSpider, self).scrapeProduct)
yield scrapy.Request(url, callback=super(MyclassSpider, self).cleanData)
yield scrapy.Request(url, callback=super(MyclassSpider, self).assignProductValues)
Ich verstehe, dass ich einen Generator erstellen, wenn Ertrag verwenden, aber ich verstehe nicht, warum die 2. und 3. Ausbeute nicht nach der ersten Ausbeute aufgerufen wird, oder wie kann ich erreichen, sie genannt zu werden.
-
Dann habe ich versucht, einen anderen Weg: Ich weiß nicht 3-Anfragen auf der Website tun wollen - nur eine und die Arbeit mit den Daten.
def parse(self, response):
for href in response.xpath("//a[@class='product--title']/@href"):
url = href.extract()
item = MyItem()
response = scrapy.Request(url, meta={'item': item}, callback=super(MyclassSpider, self).scrapeProduct)
super(MyclassSpider, self).cleanData(response)
super(MyclassSpider, self).assignProductValues(response)
yield response
Was hier geschieht, scrapeProduct
genannt wird, das eine Weile dauern könnte. (Ich habe eine 5 Sekunden Verspätung). Aber dann werden cleanData
und assignProductValues
sofort wie 30 Mal aufgerufen (so oft wie das for ist/durchgeschleift). Wie kann ich die drei Methoden eins nach dem anderen mit nur einer Anfrage an die Webseite ausführen?
Das würde bedeuten, ich würde 3 Anfragen auf dieselbe Seite machen, die ich gerne vermeiden würde. Wie wäre das möglich? – Chris