Python Scrapy-使用JOBDIR获取重复项

Python Scrapy-使用JOBDIR获取重复项,python,csv,scrapy,Python,Csv,Scrapy,Scrapy的JOBDIR设置提供可恢复的爬网,如下所述: 我尝试按如下方式执行爬网命令: scrapy crawl myspider -o out.csv -t csv -s JOBDIR=./jobs/run-1 name,email Alice,alice@example.com Bob,bob@example.com ... name,email <- duplicated header! Bob,bob@example.com <- dupli

Scrapy的JOBDIR设置提供可恢复的爬网,如下所述:

我尝试按如下方式执行爬网命令:

scrapy crawl myspider -o out.csv -t csv -s JOBDIR=./jobs/run-1
name,email
Alice,alice@example.com
Bob,bob@example.com
...
name,email            <- duplicated header!
Bob,bob@example.com   <- duplicated row!
...
当它仍在运行时,我通过按CTRL-C优雅地关闭它。然后再次启动相同的命令以恢复它。我可以确认它正在从终端输出恢复爬网:

[myspider] INFO: Resuming crawl (74 requests scheduled)
但当我查看我的输出CSV文件时,我看到有如下重复项:

scrapy crawl myspider -o out.csv -t csv -s JOBDIR=./jobs/run-1
name,email
Alice,alice@example.com
Bob,bob@example.com
...
name,email            <- duplicated header!
Bob,bob@example.com   <- duplicated row!
...
姓名、电子邮件
爱丽丝,alice@example.com
上下快速移动bob@example.com
...

姓名,电子邮件是,这是意料之中的。如果您查看的源代码,尤其是的,您会发现它在停止/恢复爬网方面是无状态的。导出器基本上用两个标志处理标题。指示它是否包含标题的命令:
include\u headers\u line
。第二个:
\u headers\u not\u write
,防止每次写入新的刮取项时转储头,会话的第一项除外。但是,每次爬虫程序重新启动时,这些标志都会重置,并且导出程序似乎不携带任何有关已恢复会话的信息:

class CsvItemExporter(BaseItemExporter):

    def __init__(self, file, include_headers_line=True, join_multivalued=',', **kwargs):

        ....
        self._headers_not_written = True
        ....

    def export_item(self, item):
        if self._headers_not_written:
            self._headers_not_written = False
            self._write_headers_and_set_fields_to_export(item)
此外,-o选项只不过是指示将刮下的项目转储到指定的输出中:

class Command(ScrapyCommand):

    ....

    def add_options(self, parser):
        ScrapyCommand.add_options(self, parser)
        parser.add_option("-a", dest="spargs", action="append", default=[], metavar="NAME=VALUE", \
            help="set spider argument (may be repeated)")
        parser.add_option("-o", "--output", metavar="FILE", \
            help="dump scraped items into FILE (use - for stdout)")
        parser.add_option("-t", "--output-format", metavar="FORMAT", default="jsonlines", \
            help="format to use for dumping items with -o (default: %default)")

那么,当我们再次运行spider时,有没有办法阻止第二次添加头呢