scrapy将参数从函数传递给另一个函数

时间:2017-10-12 12:46:03

标签: python scrapy

我在while函数中有parse_page循环,我不想在它达到极限之前制动它。

我想将函数parse_page中的3个参数传递给description,然后转到description_item

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

这是我的代码的一部分:

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 个答案:

答案 0 :(得分:1)

初始化{{1}}时,您可以为参数meta分配一个dict:

  

meta(dict) - Request.meta属性的初始值。如果   给定,此参数中传递的dict将被浅层复制。

然后您可以{{1}}访问它。