首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以自定义Scrapy JSONlines查询器以不包括Null/默认值?

是否有一种方法可以自定义Scrapy JSONlines查询器以不包括Null/默认值?
EN

Stack Overflow用户
提问于 2022-06-24 15:27:31
回答 1查看 39关注 0票数 1

我正在用Scrapy和Pydantic建立一些网络刮刀。我们目前正在使用JSONlines项导出程序将数据输出到文件中。下面是一个由刮板创建的JSON行的示例。

代码语言:javascript
复制
{
  "timestamp": null, 
  "deposit_date": "2022-01-14", 
  "secondary_date": null, 
  "termination_date": "2024-01-12", 
  "tax_structure": "UNKNOWN", 
  "initial_pop": "10.00", 
  "initial_liq": null, 
  "term": "Y02", 
  "narrative_objective": "The trust seeks to provide ....", 
  "narrative_inv_strategy": "",
  "narrative_selection": "", 
  "narrative_risks": ""
}

当刮板找不到页面上的字段/值时,标记为null或空字符串的字段是从模型中提供的默认值。问题是,这些默认值覆盖了从其他源输入的值(例如手动输入)。我希望输出不包括这些空字段,以便以后可以手动填充它们。

期望产出:

代码语言:javascript
复制
{ 
  "deposit_date": "2022-01-14", 
  "termination_date": "2024-01-12", 
  "tax_structure": "UNKNOWN", 
  "initial_pop": "10.00", 
  "term": "Y02", 
  "narrative_objective": "The trust seeks to provide ....", 
}

一种可能的解决方案是将模型更改为只包含被刮掉的字段。我想避免这样做。我正在为4个不同的网站建立类似的刮板,并希望避免不得不使4+不同的模型。甚至同一站点上的页面也有/没有不同的字段,这取决于产品。我想要实现的解决方案是定制提要导出器,使其不包括这些“空”字段,以便以后可以手动填充它们。我已经阅读过Scrapy关于Feed导出的文档,但想了解更多关于如何实现这一点的细节。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-06-26 02:56:11

另一个可能的解决方案是使用项目管道。在pipelines.py文件中的scrapy项目中,您可以筛选出任何具有不正确值的键和/或删除一个条目,以防它没有正确的字段。

pipelines.py

代码语言:javascript
复制
from scrapy.exceptions import DropItem

class SpidersPipeline:

    def process_item(self, item, spider):
        new_item = {k:v for k,v in item.items() if v not in [None, ""]}
        if len(new_item) == 0:
            raise DropItem
        return new_item

然后在settings.py文件中取消对item_pipelines字典的注释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72746285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档