2017-08-03 4 views
0

Comment obtenir les résultats d'une requête scrapy dans une variable utilisable.Obtenez les résultats de Scrapy Request

def parse_node(self,response,node): 
    yield Request('LINK',callback=self.parse_listing) 
def parse_listing(self,response): 
    for agent in string.split(response.xpath('//node[@id="Agent"]/text()').extract_first() or "",'^'): 
     HERE=Request('LINK',callback=self.parse_agent) 
     print HERE 
def parse_agent(self,response): 
    yield response.xpath('//node[@id="Email"]/text()').extract_first() 

Je suis en train d'obtenir des résultats de mon HERE=Request('LINK',callback=self.parse_agent) et les imprimer. Le parse_agent devrait ramasser un email mais je voudrais l'obtenir et l'employer dedans parse_listing.

Répondre

0
def parse_listing(self, response): 
    for agent in string.split(response.xpath('//node[@id="Agent"]/text()').extract_first() or "", '^'): 
     HERE = scrapy.Request('LINK', callback=self.parse_agent) 
     # call this req or something calls parse_agent(link) 
     yield HERE # this will yield to callback which will print or log 


def parse_agent(self, response): 
    print response #response is the parsed page from HERE) 
    email = response.xpath('//node[@id="Email"]/text()').extract_first() #something 

    print email # logging is better 
    #import logging 
    #logging.log(logging.INFO, "info from page") 
    yield email #yield to whatever function 
+0

Comment puis-je obtenir "email" de parse_agent dans parse_listing? –

+0

L'agent d'analyse ne peut transmettre des informations à la liste d'analyse que si elle génère un rappel. callback = self.parse_agent Voici comment fonctionne le flux scrapy. method1 analyse le début du lien, method2 le renvoie à la méthode 3 et ainsi de suite scrapy.Request (lien, callback = {methodname} –

+0

faites-moi savoir si vous avez besoin de plus de précisions - merci Je me rends compte que ceci et votre autre question sont liés. . –

0

Sur la base de vos commentaires dans le cadre de la première réponse, je pense que ce que vous avez vraiment besoin est d'utiliser scrapy-inline-requests dans le but (voir l'exemple là-bas). Votre code ressemblerait à ceci:

def parse_node(self, response, node): 
    yield Request('LINK', callback=self.parse_listing) 

@inline_requests 
def parse_listing(self, response): 
    for agent in string.split(response.xpath('//node[@id="Agent"]/text()').extract_first() or "",'^'): 
     agent_response = yield Request('LINK') 
     email = agent_response.xpath('//node[@id="Email"]/text()').extract_first()