我刚用scrapy完成了一个项目。 我的客户希望结果为 xlsx ,因为我没有找到导出结果的方法,我导出到 csv 然后转换xlxs(如果此代码可以改进,让我知道:)。
我的问题是当python执行csv_2_xlsx(FILE_NAME)
结果文件尚不存在时。我试着加入睡眠但是没有用。
欢迎任何帮助:)
我的主文件是这样的:
# 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)
答案 0 :(得分:1)
已修改版本
我将代码重新排列为以下方式,以解决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_2_xlsx(FILE_NAME)
添加到pipeline.py
文件中?在pipeline.py
文件的类定义中,添加close_spider()
函数并将csv_2_xlsx(FILE_NAME)
放入函数中。
def close_spider(self, spider):
csv_2_xlsx(FILE_NAME)