由于scrapy是异步的,因此您需要手动链接请求。要在请求之间传输数据,可以使用Request的
meta属性:
def parse(self, response): item = dict() item['name'] = 'foobar' yield request('http://someurl.com', self.parse2, meta={'item': item})def parse2(self, response): print(response.meta['item']) # {'name': 'foobar'}
在您的情况下,当您应该有一个连续的链时,您最终会产生一条分裂链。
您的代码应如下所示:
def parse_companies(self, response): data = json.loads(response.body) if not data: return for company in data: item = ThalamusItem() comp_id = company["id"] url = self.request_details_URL + str(comp_id) + ".json" url2 = self.request_contacts + str(comp_id) request = Request(url, callback=self.parse_details, meta={'url2': url2, 'item': item}) yield requestdef parse_details(self, response): item = response.meta['item'] url2 = response.meta['url2'] item['details'] = '' # add details yield Request(url2, callback=self.parse_contacts, meta={'item': item})def parse_contacts(self, response): item = response.meta['item'] item['contacts'] = '' # add details yield item
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)