Я сканирую с помощью scrapy 1.5.1, вызывая его из CLI:
scrapy crawl test -o data/20181204_test.json -t json
Мой конвейер довольно прост, когда я обрабатываю элемент, и после обработки я хочу перетащить его в zip-архив внутриметод close_spider:
class BidPipeline(object):
def process_item(self, item, spider):
return item
def close_spider(self, spider):
# trying to close the writing of the file
self.exporter.finish_exporting()
self.file.close()
# zip the img and json files into an archive
cleanup('test')
метод очистки:
def cleanup(name):
# create zip archive with all images inside
filename = '../zip/' + datetime.datetime.now().strftime ("%Y%m%d-%H%M") + '_' + name
imagefolder = 'full'
imagepath = '/Users/user/test_crawl/bid/images'
shutil.make_archive(
filename,
'zip',
imagepath,
imagefolder
)
# delete images
shutil.rmtree(imagepath+ '/' + imagefolder)
# add csv file to zip archive
filename_zip = filename + '.zip'
zip = zipfile.ZipFile(filename_zip,'a')
path_to_file = '/Users/user/test_crawl/bid/data/'+ datetime.datetime.now().strftime ("%Y%m%d") + '_' + name + '.json'
zip.write(path_to_file, os.path.basename(path_to_file))
zip.close()
Обратная трассировка после использования self.file.close ():
AttributeError: 'BidPipeline' object has no attribute 'exporter'
2018-12-04 06:03:48 [scrapy.extensions.feedexport] INFO: Stored json feed (173 items) in: data/20181204_test.json
Withou file.closeошибки обратного отслеживания не возникает, и сначала она отображается в порядке, но json-файл усекается.
Конец распакованного файла из zip-архива с выводом json-файла из scrapy:
..a46.jpg"]},
json-файлвывод с помощью scrapy:
a46.jpg"]}]
Как мне закрыть запись файла, чтобы сжать его?