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