在scrapy itemloader中更改响应

时间:2019-07-12 17:25:26

标签: scrapy

是否有一种方法可以更改ItemLoader中使用的响应,例如我正在解析两个页面,并且在meta中传递了my_item,因此项目加载器中的响应是第一个(我最初在其中定义了它) )。  我目前正在使用my_item.add_value('price',response.xpath('//p[@id="price"]').extract_first()来传递此消息,因为我不能使用my_item.add_xpath('price', '//p[@id="price"]'),因为响应是从初始页面开始的

my_item = ItemLoader(item=MyItem(),response=response)
#fill my_item
yield Request(My_url,callback=self.parse_item,meta={'my_item':my_item)

1 个答案:

答案 0 :(得分:1)

您需要这样的东西:

def parse(self, response):

    l = ItemLoader(item=YourItem(), response=response)
    l.add_xpath('Field1', '...')
    l.add_value('Field2', '...')

    item = l.load_item()

    yield scrapy.Request(
        url=another_url,
        callback=self.second,
        meta={'item': item}
    )

def second(self, response):

    l = ItemLoader(item=response.meta["item"], response=response)
    l.add_xpath("Field3", '...')

    yield l.load_item()