我正在用Scrapy和Pydantic建立一些网络刮刀。我们目前正在使用JSONlines项导出程序将数据输出到文件中。下面是一个由刮板创建的JSON行的示例。
{
"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或空字符串的字段是从模型中提供的默认值。问题是,这些默认值覆盖了从其他源输入的值(例如手动输入)。我希望输出不包括这些空字段,以便以后可以手动填充它们。
期望产出:
{
"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导出的文档,但想了解更多关于如何实现这一点的细节。
任何帮助都将不胜感激。
发布于 2022-06-26 02:56:11
另一个可能的解决方案是使用项目管道。在pipelines.py文件中的scrapy项目中,您可以筛选出任何具有不正确值的键和/或删除一个条目,以防它没有正确的字段。
pipelines.py
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字典的注释。
https://stackoverflow.com/questions/72746285
复制相似问题