Python 暂停和恢复爬网时出现意外结果

Python 暂停和恢复爬网时出现意外结果,python,scrapy,Python,Scrapy,我一直在测试 蜘蛛- import scrapy class QuotesSpider(scrapy.Spider): name = "quotes" start_urls = [ 'http://quotes.toscrape.com/page/1/', ] def parse(self, response): for quote in response.css('div.quote'):

我一直在测试

蜘蛛-

import scrapy


class QuotesSpider(scrapy.Spider):
    name = "quotes"
    start_urls = [
        'http://quotes.toscrape.com/page/1/',
    ]

    def parse(self, response):
        for quote in response.css('div.quote'):
            yield {
                'text': quote.css('span.text::text').get(),
                'author': quote.css('span small::text').get(),
                'tags': quote.css('div.tags a.tag::text').getall(),
            }

        next_page = response.css('li.next a::attr(href)').get()
        if next_page is not None:
            yield response.follow(next_page, callback=self.parse)
测试1:完全不间断爬网并覆盖任何现有文件
-O
结果:
quotes.json
按预期包含100组引号(全部10页)的数组

测试2:重复完全不间断爬网并覆盖任何现有文件
-O
结果:
quotes.json
被一个包含10组引号的数组覆盖

问题:我希望scrapy知道他已经被刮了。为什么它会再次抓取相同的URL

测试3:删除输出文件和爬网目录,将新内容附加到任何现有文件中<代码>-o并使用CTRL-C中断爬网 结果:
quotes.json
包含40组引号的数组(前4页)

测试4:从测试3恢复爬网,并将新内容附加到任何现有文件中<代码>-o 结果:
quotes.json
现在使用无效的json,包含大约110组引号


问:为什么会发生这种情况?有没有办法恢复爬网并生成正确的输出文件?

您是否优雅地停止爬网程序(单CTRL+C)或(双CTRL+C)?@Georgie我使用单CTRL+C优雅地停止爬网
scrapy crawl quotes -s JOBDIR=crawls -O quotes.json
scrapy crawl quotes -s JOBDIR=crawls -O quotes.json
scrapy crawl quotes -s JOBDIR=crawls -o quotes.json
[CTRL-C]
scrapy crawl quotes -s JOBDIR=crawls -o quotes.json