Python 如何知道管道中的spider是否已关闭

Python 如何知道管道中的spider是否已关闭,python,scrapy,Python,Scrapy,我编写了以下管道,以便将提取的项目直接放入excel文件中,我运行了spider,没有任何错误,但是文件没有保存,我知道它缺少workbook.close(),问题是我不知道将它放在代码中的何处 from datetime import datetime import xlsxwriter ordered_list=['Link','Price','Date','discount'] class guiPipeline(object): def __init__(self):

我编写了以下管道,以便将提取的项目直接放入excel文件中,我运行了spider,没有任何错误,但是文件没有保存,我知道它缺少
workbook.close()
,问题是我不知道将它放在代码中的何处

from datetime import datetime
import xlsxwriter
ordered_list=['Link','Price','Date','discount']

class guiPipeline(object):

    def __init__(self):
        now = datetime.now()
        workbook = xlsxwriter.Workbook('data.xlsx')
        self.worksheet = workbook.add_worksheet()
        self.write_first_row()
        self.index = 1
    def process_item(self, item, spider):
        for _key,_value in item.items():
            col=ordered_list.index(_key)
            self.worksheet.write(self.index,col,_value)
        self.index+=1

        return item

    def write_first_row(self):
        for header in ordered_list:
            col=ordered_list.index(header)
            self.worksheet.write(0,col,header)

这是我的管道,我只需要知道在spider完成时如何
关闭()
工作簿

打开或关闭spider时可以调用一些方法:

您可以在以下文档中找到一个示例:

您还必须添加这个
crawler.signals.connect(self.close\u spider,signals.spider\u closed)

到您的
def\uuuu init\uuuu

如何连接到管道中关闭的“信号”卡盘?它工作时,您也可以在不连接信号的情况下执行
关闭卡盘(self,spider)