栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/646824.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号