Scrapy 刮皮不';是否添加并非所有项目中都存在的字段?
我从链接中获取字段a、b、c,并生成一个OrderedDict。 但是如果一个条件得到满足,我还没有屈服,首先我请求另一个链接,将a,b,c字典传输到该请求(通过部分),并从第二个链接获取字段d,e,并屈服于d,e,a,b,c 所以有些项目应该有d,e,a,b,c字段 有些项目应该只有a,b,c 当我打印订购的图片时,它们是正确的: the second OrderedDict has keys d,e,a,b,c the first OrderedDict has keys a,b,c 第二个订单的DICT有键d、e、a、b、c 第一个订单的ICT有a、b、c键 但在导出的.csv文件中,我只看到a、b、c列 所以我的问题是:scrapy是否没有显示所有项目中都不存在的字段 注意:字段我只是指列标题,我不使用scrapy的Item和Fields类,我只使用OrderedDictScrapy 刮皮不';是否添加并非所有项目中都存在的字段?,scrapy,field,ignore,Scrapy,Field,Ignore,我从链接中获取字段a、b、c,并生成一个OrderedDict。 但是如果一个条件得到满足,我还没有屈服,首先我请求另一个链接,将a,b,c字典传输到该请求(通过部分),并从第二个链接获取字段d,e,并屈服于d,e,a,b,c 所以有些项目应该有d,e,a,b,c字段 有些项目应该只有a,b,c 当我打印订购的图片时,它们是正确的: the second OrderedDict has keys d,e,a,b,c the first OrderedDict has keys a,b,c 第二个
更新:我通过生成一个dict(更新第一个dict)解决了我的问题。但我仍然对上面的问题感到好奇。让我们首先快速查看一下以下中的相关源代码: 导出器本身处理流数据,这意味着它不能在写入文件之前缓冲所有spider输出。因此,CSV导出器必须仅从第一项推断标题
如果您使用的是
scrapy.Item
,应该没有任何问题。否则,如果您使用的是Python的dict,则第一项的字段名将用作CSV头。让我们首先快速查看以下内容中的相关源代码:
导出器本身处理流数据,这意味着它不能在写入文件之前缓冲所有spider输出。因此,CSV导出器必须仅从第一项推断标题
如果您使用的是scrapy.Item
,应该没有任何问题。否则,如果使用Python的dict
,则第一项的字段名将用作CSV头
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)