2017-10-12 216 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訪問它。

相關問題