Как настроить ItemExporter, чтобы он не перекрывал выходной файл в Scrapy - PullRequest
1 голос
/ 16 мая 2019

Я пишу простой веб-сканер с копией, который собирает данные с двух разных сайтов. Вы можете найти все мои файлы здесь .

В основном у меня есть main.py файл:

#!/usr/bin/env python
import scrapy
from app.spiders.spider_maquinas import VultrSpider, DigitalOceanSpider
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

class Main():
    def __init__(self):
        settings = get_project_settings()
        process = CrawlerProcess(settings)
        process.crawl(VultrSpider())
        process.crawl(DigitalOceanSpider())
        process.start()

if __name__ == '__main__':
    main = Main()

А это конвейеры для моих двух пауков:

import json
from scrapy.exporters import JsonItemExporter, CsvItemExporter

class CustomJsonExporter(JsonItemExporter):
    def _beautify_newline(self):
        self.file.write(b'\n')

class PrintItem:
    def process_item(self, item, spider):
        print(dict(item))
        return item

class JsonPipeline:
    def open_spider(self, spider):
        self.file       = open('static/maquinas.json', 'wb')
        self.exporter   = CustomJsonExporter(self.file)
        self.exporter.start_exporting()

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

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

class CsvPipeline:
    def open_spider(self, spider):
        self.file       = open('static/maquinas.csv', 'wb')
        self.exporter   = CsvItemExporter(self.file)
        self.exporter.fields_to_export = ['storage', 'cpu', 'memory', 'bandwidth', 'price']

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

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

Но второй паук переопределяет первые значения. Мне нужно написать новые конвейеры, изменив это вручную, чтобы теперь переопределять данные, или есть простой способ сделать это? Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...