2017-09-20 3 views
0

ein paar Tagen fragte ich diese vor ergeben: scrapy getting values from multiple sitesscrapy wie aus miltiable Quellen

und ich habe gelernt, wie man Wert von website1 zu Website2 passieren. Dadurch können meine Ertragsinformationen von beiden Seiten nicht gelöst werden, wenn ich zB 10 verschiedene Seiten habe.

Ich kann Werte von Funktion zu Funktion weiterleiten, aber es scheint idiotisch. Der effizientere Weg wäre, die Informationen an die Parse-Funktion zu senden und von dort zu erhalten. Hier ist ein Pseudo-Code von dem, was ich erreichen möchte.

import scrapy 

class GotoSpider(scrapy.Spider): 
    name = 'goto' 
    allowed_domains = ['first.com', 'second.com', 'third.com'] 
    start_urls = ['http://first.com/'] 

def parse(self, response): 
    name = response.xpath(...) 
    price1 = scrapy.Request(second.com, callback = self.parse_check) 
    price2 = scrapy.Request(third.com, callback = self.parse_check2) 
    yield(name, price1, price2) 


def parse_check(self, response): 
    price = response.xpath(...) 
    return price 

def parse_check(self, response): 
    price = response.xpath(...) 
    return price 

Antwort

2

Schauen Sie sich scrapy-inline-requests, es ist wahrscheinlich das, was Sie suchen. Ihr Beispiel würde dann etwa lauten:

import scrapy 
from inline_requests import inline_requests 

class GotoSpider(scrapy.Spider): 
    name = 'goto' 
    allowed_domains = ['first.com', 'second.com', 'third.com'] 
    start_urls = ['http://first.com/'] 

    @inline_requests 
    def parse(self, response): 
     name = response.xpath(...) 

     response1 = yield scrapy.Request(second.com) 
     price1 = response1.xpath(...) 
     response2 = yield scrapy.Request(third.com) 
     price2 = response2.xpath(...) 

     yield dict(name, price1, price2) 
+0

hmm scheint einfach genug. Aber warum ist es keine eingebaute Funktion? Ich denke, es ist eine gängige Idee, ein paar Websites zu scrappen und Preise unterwegs zu vergleichen. – daniel

+0

Wenn ich mich recht erinnere, gab es einige Diskussionen über Github über die Integration in Scrapy, aber erinnere mich nicht an die Details. Dies ist eher eine Frage für Entwickler. –

Verwandte Themen