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

如何按类定义顺序输出Scrapy Item的字段?

解决Scrapy Item字段顺序问题

嗨,这个问题我之前也碰到过,Scrapy默认确实会把Item的字段按字母顺序排列输出,不过有两个实用的方法能让它保持你在类里定义的顺序:

方法一:在Item类中指定__fields_order__属性

直接在你的QuotetutorialItem类里添加一个__fields_order__列表,按你想要的顺序列出字段名就行。这样不管是yield Item还是导出数据,都会遵循这个顺序:

import scrapy

class QuotetutorialItem(scrapy.Item):
    url = scrapy.Field()
    country = scrapy.Field()
    state = scrapy.Field()
    
    # 指定字段顺序,和类定义的顺序一致
    __fields_order__ = ['url', 'country', 'state']

方法二:通过配置FEED_EXPORT_FIELDS控制导出顺序

如果你只是希望导出数据(比如JSON、CSV等格式)时保持顺序,可以在Scrapy项目的settings.py里配置FEED_EXPORT_FIELDS参数,把你需要的字段按顺序列出来:

# settings.py
FEED_EXPORT_FIELDS = ['url', 'country', 'state']

这个方法的好处是不需要修改Item类,适合只需要调整导出结果顺序的场景。

补充说明一下:早期Python的字典是无序的,所以Scrapy的Item默认会按字段名的字母序处理;虽然现在Python 3.7+的原生字典已经有序,但Scrapy为了兼容性,还是默认采用字母序排列字段,所以必须通过上面的方法显式指定顺序才行。

内容的提问来源于stack exchange,提问作者Дядя Фея

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:33:59