Scrapy:没有标题

时间:2015-12-27 23:02:05

标签: python scrapy

当我使用命令scrapy crawl <project> -o <filename.csv>时,我得到带有标题的Item字典的输出。这很好。但是,如果文件已经存在,我希望scrapy省略标题。 scrapy能够做到这一点还是我需要实现这个功能?

1 个答案:

答案 0 :(得分:7)

include_headers_line=True中有CsvItemExporter但我不知道如何直接使用它。 http://doc.scrapy.org/en/latest/topics/exporters.html#csvitemexporter

但您可以在文件include_headers_line=False中创建自己的exporters.py导出器(与settings.pyitems.py位于同一文件夹中)

from scrapy.exporters import CsvItemExporter


class HeadlessCsvItemExporter(CsvItemExporter):

    def __init__(self, *args, **kwargs):
        kwargs['include_headers_line'] = False
        super(HeadlessCsvItemExporter, self).__init__(*args, **kwargs)

然后您必须在settings.py

中设置此导出程序
FEED_EXPORTERS = {
    'csv': 'your_project_name.exporters.HeadlessCsvItemExporter',
}

现在scrapy应该编写没有标题的csv文件。

scrapy crawl <project> -o <filename.csv>

或者你可以设置

FEED_EXPORTERS = {
    'headless': 'your_project_name.exporters.HeadlessCsvItemExporter',
}

并仅在使用-t headless

时获取不带标头的csv
scrapy crawl <project> -o <filename.csv> -t headless

PS。不要忘记在your_project_name

中使用您的项目名称代替setttings.py

修改

现在,只有当文件不为空(例如file.tell() > 0

时,导出器才会跳过标题
from scrapy.exporters import CsvItemExporter


class HeadlessCsvItemExporter(CsvItemExporter):

    def __init__(self, *args, **kwargs):

        # args[0] is (opened) file handler
        # if file is not empty then skip headers
        if args[0].tell() > 0:
            kwargs['include_headers_line'] = False

        super(HeadlessCsvItemExporter, self).__init__(*args, **kwargs)