【scrapy】item传递出错

最近在练习用scrapy爬文本数据,在爬某问答社区的时候,因为问题有两级分类:c1,c2,我用一个列表来存储分类信息:item['class'] = [c1,c2]

但是在使用Request函数向下一级传递item信息时,使用如下函数

Request(href,meta={'item':item},callback=self.parse2,dont_filter=True)

却发现传递到parse2中的item['class']的值与传递前不同,在传递前,我的item['class']值无论是[c1,c2]还是[c1,c3]还是[c1,c4],传递后都变为了[c1,c4]。

查找原因后,发现是因为使用Request函数传递item时,使用的是浅复制(对象的字段值被复制时,字段引用的对象不会被复制),因此item被复制时,class字段对应的列表中的值c1,c2没有被复制。

解决方法:

在调用Request时使用深复制

import copy

class spider(scrapy.Spider)

   name=['xx']

   start_urls=['xx']

              def parse(self,response):

                    #...

                   yield   Request(href,meta={'item':copy.deepcopy(item)},callback=self.parse2,dont_filter=True)

 

 

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页