没有输出的输入是不完整的

0%

Bug-scrapy-数据错位

在用scrapy进行数据爬取的时候,发现通过meta传递的数据不匹配,最后发现是深拷贝和浅拷贝的问题。

Bug详情

yield Request中传递的meta是浅拷贝,所以当我们有多条请求等待处理的时候,前面请求传递的meta会被后面请求传递的meta修改(他们指向同一个对象),所以就会造成前后不匹配。
解决方式就是将其浅拷贝变成深拷贝。

1
2
3
4
import copy
···
def parse(self, response):
yield Request(url=new_url, meta={'item': copy.deepcopy(item)}, callback=self.another_parse)

同理,如果下载的时候下载item的时候也报错的话,也要记得将item的传递变成深拷贝即可。

1
2
# 原来是yield item ,变成如下的样子即可。
yield copy.deepcopy(item)

参考链接

1.scrapy里面item传递数据后数据不正确的问题