如何按类定义顺序输出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,提问作者Дядя Фея
相关产品推荐
相关产品推荐

