scrapy 不会添加所有项目中不存在的字段?

2023-12-25

我从链接获取字段 a、b、c 并生成 OrderedDict。 但是,如果满足条件,我还不会屈服,首先我对另一个链接发出请求,将 a,b,c 字典传输到该请求(通过部分),并从第二个链接获取字段 d,e 并屈服d、e、a、b、c。

所以有些项目应该有字段 d,e,a,b,c 有些项目应该只有 a、b、c

当我打印 OrderedDicts 时,它们是正确的:


the second OrderedDict has keys d,e,a,b,c
the first OrderedDict has keys a,b,c  

但在导出的 .csv 文件中,我只看到 a、b、c 列。

所以我的问题是:scrapy 是否不显示所有项目中不存在的字段?

注意:按字段我只是指列标题,我不使用 scrapy 的 Item 和 Fields 类,我只使用 OrderedDict

更新:我已经设法通过生成一个字典(更新第一个字典)来解决我的问题。但我还是对上面的问题很好奇。


我们先快速浏览一下相关源码scrapy.exporters.CsvItemExporter https://github.com/scrapy/scrapy/blob/master/scrapy/exporters.py#L203:

    def export_item(self, item):
        if self._headers_not_written:
            self._headers_not_written = False
            self._write_headers_and_set_fields_to_export(item)

        fields = self._get_serialized_fields(item, default_value='',
                                             include_empty=True)
        values = list(self._build_row(x for _, x in fields))
        self.csv_writer.writerow(values)

    def _write_headers_and_set_fields_to_export(self, item):
        if self.include_headers_line:
            if not self.fields_to_export:
                if isinstance(item, dict):
                    # for dicts try using fields of the first item
                    self.fields_to_export = list(item.keys())
                else:
                    # use fields declared in Item
                    self.fields_to_export = list(item.fields.keys())
            row = list(self._build_row(self.fields_to_export))
            self.csv_writer.writerow(row)

导出器本身处理流数据,这意味着它无法缓冲all写入文件之前蜘蛛会输出。因此,CSV 导出器必须仅从第一项推断标题。

如果您正在使用scrapy.Item,应该没有任何问题。否则,如果你使用的是Pythondict,第一项的字段名称将用作 CSV 标题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scrapy 不会添加所有项目中不存在的字段? 的相关文章

随机推荐

  • Google Cloud 文本转语音界面混乱(如何下载 mp3 文件?)

    我想以这样的事实作为序言 我不是程序员 开发人员 我是多媒体设计师 我使用文本转语音来生成占位符音频文件 这些文件可用于在录制官方音频旁白之前为动画计时 之前我使用的是 Amazon Polly 但我想尝试一下 Google Cloud 然
  • 如何在 remix run 应用程序中加载 Svg 组件

    我有一些 Svg 文件 我想将它们作为 React 组件加载到 remix run 应用程序中 例如在创建反应应用程序 https create react app dev docs adding images fonts and file
  • marshmallow - 序列化时如何将架构属性映射到另一个键?

    我需要创建一个与给定规范一致的棉花糖模式 其中我无法更改键名称 其中一个关键是 Python 中的保留关键字 from class TemporalExtentSchema Schema from fields String require
  • 如何为 Python 设置 LIBSVM

    I built libsvm http www csie ntu edu tw cjlin libsvm 在 Mac OS X 上使用 Make tar xzfv libsvm 3 17 tar gz cd libsvm 3 17 make
  • 如何在SQL Server 2008中检查字符串是否是阿拉伯语言

    如何检查字符串是否为阿拉伯语 我必须将语言 ID 列更新为英语或阿拉伯语 IF PATINDEX RTRIM STRING 0 BEGIN SET RETURNVALUE A END ELSE IF PATINDEX A Za z RTRI
  • Android Retrofit 预期为 BEGIN_OBJECT,但在第 1 行第 1 列路径 $ 处为 STRING

    我在 Android 应用程序中使用 okhttp Retrofit 来发出网络请求 在其中一个请求中 我收到此错误 com google gson JsonSyntaxException java lang IllegalStateExc
  • PEG 和 CFG 有什么区别?

    由此维基百科 http en wikipedia org wiki Parsing expression grammar Semantics page 之间的根本区别 上下文无关语法和解析 表达式语法是 PEG 的 选择运算符是有序的 如果
  • Google Analytics - 使用两个帐户进行异步跟踪

    我目前正在同一页面上使用两个不同的跟踪代码来测试 GA 新的异步代码片段 gaq push setAccount UA XXXXXXXX 1 trackPageview b setAccount UA XXXXXXXX 2 b trackP
  • 将闭包更新到 Swift 3 - @escaping

    我已将代码更新到 Xcode 8 0 beta 6 但我陷入了似乎与新的非转义闭包默认值有关的问题 在下面的代码中 Xcode 建议添加 escaping在 前面completion 在下面代码的第一行中 但仍然无法编译并继续循环 EDIT
  • “向‘日期时间’列添加值导致溢出。”

    In the MSDN明确表示 日期参数不能递增到其数据类型范围之外的值 在以下语句中 与日期值相加的数值超出了日期数据类型的范围 返回以下错误消息 向 日期时间 列添加值导致溢出 以及例子 SELECT DATEADD year 2147
  • 将 JSON 对象反序列化为 C# 对象

    我正在尝试使用 RestSharp 读取一些 json 数据 但我在读取 json 对象时遇到一些问题 我有这样的回应 expand html self
  • jquery 函数根本不触发

    真正的愚蠢问题 我想我现在应该已经明白了这一点 但我显然错过了一些东西 我希望我的函数在页面加载后立即触发 以检查变量的值 并根据该值使按钮出现或消失 但我写的函数永远不会被调用 我将该函数放置在 Load 和 document ready
  • 容器管理的事务无法回滚

    我正在玩交易 我配置了 JPA 来处理我的实体 并希望将它们保存在数据库中 问题是 当我的程序抛出runtimeException时 CMT不会回滚 这个 容器事物 背后的想法很难理解 而且记录也很少 transactional 托管事务
  • 如何使用 Java 更有效地反转数字

    我编写了一些代码来反转数字 如下所示 long num 123456789 char arr String valueOf num toCharArray List
  • 当线程被中断/终止时,finally 块可能不会被执行吗?

    In Java 教程 http docs oracle com javase tutorial essential exceptions finally html它说的是try finally 注意 如果在执行 try 或 catch 代码
  • JPA动态持久性单元名称

    我需要一种方法来动态指定 EJB 中的持久性单元 简化示例 我有一个使用多个数据库作为数据存储的应用程序 每个数据存储在结构上都是相同的 根据连接到应用程序的客户端 我需要从中访问数据 特定的数据存储 因此 我想使用相同的EJB 这样业务逻
  • 将私有方法设为最终方法?

    将私有方法设为final有好处吗 这会提高性能吗 我认为 private final 没有多大意义 因为私有方法不能被重写 因此 方法查找应该与使用 Final 时一样高效 将私有辅助方法设置为静态 如果可能 会更好吗 最好用什么 priv
  • 从 Spring Boot 中的基本身份验证中删除 WWW-authenticate 标头

    我正在使用 SpringBoot 设计 REST API 与此同时 我正在构建一个使用该 API 的 SPA 为了安全起见 我选择了基本身份验证 它很容易设置 我现在面临401挑战问题 当我的 SPA 向我的 API 发出请求时 如果身份验
  • 为什么 Python easy_install 无法在我的 Mac 上运行?

    我有一台运行 Python 2 6 的 Mac 当我尝试使用时easy install我收到这条消息 usr bin easy install 2 6 7 UserWarning Module pkg resources was alrea
  • scrapy 不会添加所有项目中不存在的字段?

    我从链接获取字段 a b c 并生成 OrderedDict 但是 如果满足条件 我还不会屈服 首先我对另一个链接发出请求 将 a b c 字典传输到该请求 通过部分 并从第二个链接获取字段 d e 并屈服d e a b c 所以有些项目应