2017-10-12 190 views
0

我在parse_page函数中有while循环,我不想在它达到极限之前将它制动。scrapy将参数从一个函数传递到另一个函数

我想从函数parse_page传递3个参数到description,然后转到description_item

它解析函数description_item后,我希望它返回到parse_page函数内的while循环。

这是我的代码部分:

def parse_page(self, response): 
    item = TestItem() 

    ... # more code here 

    while i <= len(response.xpath("//script[2]//text()").extract_first()): 
     # parsing url 
     parsed = urlparse.urlparse(url) 
     tranz_type = urlparse.parse_qs(parsed.query)['tranz'] 
     categ_type = urlparse.parse_qs(parsed.query)['categ'] 

     id = js2xml.jsonlike.make_dict(jstree.xpath("//var[@name='ANUNTURI']//property[@name='ID']")[i]) 
     item['url'] = url 

     item['id'] = id[1] 
     item['tranz_type'] = tranz_type 
     item['categ_type'] = categ_type 
     i += 1 

     request = Request(response, callback=self.description) 
     request.meta['id'] = id 
     request.meta['tranz_type'] = tranz_type 
     request.meta['categ_type'] = categ_type 

     #yield item 
     return request 


def description(self, response): 

    id =response.meta.get('id') 
    tranz_type =response.meta.get('tranz_type') 
    categ_type =response.meta.get('categ_type') 

    data = {'id_anunt': id, 'tranz': tranz_type, 'categ': categ_type, 'mc': '1', 'id_cautare': '0'} 

    print data 

    req = FormRequest.from_response(response, url="http://map.imobiliare.ro/map/serv/detalii", formdata=data, 
            callback=self.description_items) 

    yield req 

def description_item(self, response): 

    item = TestItem() 

    item['link'] = json.loads(response.body).get('link') 

    yield item 

回答

1

初始化Request时,您可以指定一个快译通到参数meta

元(字典) - 为Request.meta属性的初始值。如果给出 ,则在此参数中传递的字典将被浅拷贝。

然后您可以通过response.meta访问它。

相关问题