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