• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

Scrapy item的传递

武飞扬头像
王不亏
帮助1

循环中的传递

错误示例:
def list_parse(self, response, **kwargs):
    item = DemoItem()
    post_list = json.loads(response.text)['rows']
    for post in post_list:
        item['pronum'] = post['ProjectCode']
        yield scrapy.Request(url=pre_url, callback=self.detail_parse, meta={'item': item})

def detail_parse(self, response, **kwargs):
    item = response.meta['item']
    print(item['pronum']

在传值item时,会出现获取到最后一个item的情况,而且是循环调用最后一个,就像是上面yield 这一部分是个for循环,但是下面的 DemoItem() 不在循环内,所以就只能一直调用到最后一个item.

修改之后的代码:
def list_parse(self, response, **kwargs):
    post_list = json.loads(response.text)['rows']
    for post in post_list:
	    item = DemoItem()
        item['pronum'] = post['ProjectCode']
        yield scrapy.Request(url=pre_url, callback=self.detail_parse, meta={'item': item})

def detail_parse(self, response, **kwargs):
    item = response.meta['item']
    print(item['pronum'])

上面修改后的代码还是无法解决问题,最终以下面的方式解决了这个问题

最终解决!!!
def list_parse(self, response, **kwargs):
    post_list = json.loads(response.text)['rows']
    for post in post_list:
	    item = {}
        item['pronum'] = post['ProjectCode']
        yield scrapy.Request(url=pre_url, callback=self.detail_parse, meta={'item': item})

def detail_parse(self, response, **kwargs):
    _item = response.meta['item']
    item = DemoItem()
    item['pronum'] = _item['pronum']
    yield item

以上解决办法主要思路即,最初的数据以 键值对 的形式 传参至回调函数中,在最终需要 yield 的时候再实例化,并赋值。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfigbke
系列文章
更多 icon
同类精品
更多 icon
继续加载