在用scrapy进行数据爬取的时候,发现通过meta传递的数据不匹配,最后发现是深拷贝和浅拷贝的问题。
Bug详情
yield Request中传递的meta是浅拷贝,所以当我们有多条请求等待处理的时候,前面请求传递的meta会被后面请求传递的meta修改(他们指向同一个对象),所以就会造成前后不匹配。
解决方式就是将其浅拷贝变成深拷贝。
1 | import copy |
同理,如果下载的时候下载item的时候也报错的话,也要记得将item的传递变成深拷贝即可。
1 | # 原来是yield item ,变成如下的样子即可。 |