抓取多个请求并填写单个项目

抓取多个请求并填写单个项目,第1张

抓取多个请求并填写单个项目

由于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


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5649023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存