Python 在爬网进程结束后转换结果

Python 在爬网进程结束后转换结果,python,scrapy,web-crawler,Python,Scrapy,Web Crawler,我刚和scrapy完成了一个项目。 我的客户希望结果为xlsx,因为我没有找到像这样导出结果的方法,我正在导出到csv,然后转换xlx(如果此代码可以改进,请告诉我:) 我的问题是当python执行csv\u 2\u xlsx(文件名)结果文件还不存在时。我试着增加睡眠时间,但不起作用 欢迎任何帮助:) 我的主文件如下: # main.py from scrapy.crawler import CrawlerProcess from spiders import my_spider from e

我刚和scrapy完成了一个项目。 我的客户希望结果为xlsx,因为我没有找到像这样导出结果的方法,我正在导出到csv,然后转换xlx(如果此代码可以改进,请告诉我:)

我的问题是当python执行
csv\u 2\u xlsx(文件名)
结果文件还不存在时。我试着增加睡眠时间,但不起作用

欢迎任何帮助:)

我的主文件如下:

# main.py
from scrapy.crawler import CrawlerProcess
from spiders import my_spider
from exporter import csv_2_xlsx

FILE_NAME = 'result.csv'

process = CrawlerProcess({
    'FEED_FORMAT': 'csv',
    'FEED_URI': FILE_NAME,
    'FEED_EXPORTERS' : {
        'csv': 'exporter.FixLineCsvItemExporter',
    }
})

process.crawl(my_spider.MySpider)

# I think python should stop until
# this process ends
process.start()

# this line is not working cause
# result.csv doest not exist yet
csv_2_xlsx(FILE_NAME)

编辑版本

为了解决csv文件未关闭的问题,我按照以下方式重新排列了您的代码

main.py

from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings


process = CrawlerProcess(get_project_settings())

process.crawl('spider_name')
process.start()
Pipeline.py

from scrapy.exporters import CsvItemExporter
from exporter import csv_2_xlsx


FILE_NAME = 'result.csv'
class TutorialPipeline(object):
    def __init__(self):
        self.file = open(FILE_NAME, 'wb')
        self.exporter = CsvItemExporter(self.file)
        self.exporter.start_exporting()

    def close_spider(self, spider):
        self.exporter.finish_exporting()
        self.file.close()
        csv_2_xlsx(FILE_NAME)

    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item

您是否尝试将
csv\u 2\u xlsx(文件名)
添加到
pipeline.py
文件中?在
pipeline.py
文件的类定义中,添加一个函数并将
csv\u 2\u xlsx(文件名)
放入该函数中

def close_spider(self, spider):
    csv_2_xlsx(FILE_NAME)

我只是检查了一下,没有工作。看起来导出过程是在spider关闭后进行的。@Freddy不是spider终止时生成的
结果.csv
?您记得在
设置.py中激活管道吗?管道正在工作。为了更好的理解,我记录了这个问题@Freddy,我测试并添加了上面代码的新编辑版本。希望它能帮助你。如果它仍然不起作用,请通知我。