You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy循环生成多Item返回重复数据,请问问题出在哪里?

问题原因及解决办法

你遇到的问题核心是Python的对象引用机制:
你写的new_item = item并没有创建新的Item实例,只是让new_item变量指向了原来的item对象。循环里每次修改new_item["new_field"],其实都是在修改同一个Item对象,最后yield出去的全是这个对象的引用,所以返回的n条数据完全相同。

解决办法很简单,每次循环都创建一个独立的Item实例,有两种常用方式:

方式1:使用深拷贝(推荐,适合Item包含嵌套结构的情况)

from copy import deepcopy

for i in new_fields:
    new_item = deepcopy(item)  # 完全复制原item的所有内容,生成新实例
    new_item["new_field"] = i
    yield new_item

方式2:使用Scrapy Item的copy方法(适合字段都是简单类型的情况)

Scrapy的Item类自带copy()方法,可以快速创建浅拷贝:

for i in new_fields:
    new_item = item.copy()
    new_item["new_field"] = i
    yield new_item

这样每次yield的都是独立的Item对象,修改new_field只会影响当前循环的实例,最终返回的每条数据就会对应不同的new_field值了。

内容的提问来源于stack exchange,提问作者Zero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 01:18:18