当我使用该命令时scrapy crawl
,我得到Item
带有标题的字典输出.这很好.但是,如果文件已存在,我希望scrapy省略标题.scrapy能够做到这一点还是我需要实现该功能?
有include_headers_line=True
,CsvItemExporter
但我不知道如何直接使用它.http://doc.scrapy.org/en/latest/topics/exporters.html#csvitemexporter
但您可以include_headers_line=False
在文件中创建自己的导出器exporters.py
(与settings.py
and 相同的文件夹items.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-o
或者你可以设置
FEED_EXPORTERS = { 'headless': 'your_project_name.exporters.HeadlessCsvItemExporter', }
只有在使用时才能获得没有标题的csv -t headless
scrapy crawl-o -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)