如何指示Scrapy不序列化项目字段?

时间:2017-08-30 21:49:33

标签: python scrapy

作为熟悉Scrapy的学习实验,我正在编写一个Scraper,它会检查HTML页面的所有链接,并报告指向它们的HTTP HEAD请求的状态代码。事实上,在我的一个项目定义中,我有一个项目字段,即parent_url,被视为元数据 - 也就是说,我并不是要在我的Scraper输出中显示它。

parent_urlLinkItem类中定义,如下所示:

class LinkItem(Item):
    name = Field()
    url = Field()
    parent_url = Field()   # Identifies what URL this item was extracted from
    status_code = Field()

为了从我的Spider输出中省略parent_url,我尝试过:

  1. parent_url中定义__init__作为实例属性 - 我在尝试访问时遇到异常;
  2. 分配到self["parent_url"]内的__init__,但正如文档中已经注意到的,Scrapy不允许分配到未声明的字段;
  3. Field(serializer=None)Field(serializer=empty_function)分配给parent_url,这会在抓取时生成连续异常,并且只使用逗号生成JSON输出。
  4. 尚未找到解决方案,我正在寻求外部帮助。 parent_url字段/属性在管道内部使用,我不知道还有什么可以替代它。

2 个答案:

答案 0 :(得分:1)

您可以指定应通过FEED_EXPORT_FIELDS设置导出的字段。例如:

# in `settings.py`
FEED_EXPORT_FIELDS = ['name', 'url', 'status_code']

答案 1 :(得分:0)

BaseItemExporter是所有内置导出器的基本抽象类,它提供了一个fields_to_export属性,其中包含要导出的字段名称列表。这是正确的文件,我很惊讶我以前没有注意到它。