Я пишу простой веб-сканер с копией, который собирает данные с двух разных сайтов. Вы можете найти все мои файлы здесь .
В основном у меня есть 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
Но второй паук переопределяет первые значения. Мне нужно написать новые конвейеры, изменив это вручную, чтобы теперь переопределять данные, или есть простой способ сделать это? Спасибо!