Как отправить данные из одного конвейера в другой в Scrapy ⇐ Python
Как отправить данные из одного конвейера в другой в Scrapy
Здравствуйте, у меня есть два конвейера, первый из которых предназначен для загрузки фотографий:
класс ModelsPipeline(ImagesPipeline): def get_media_requests(self, item, info): для image_url в элементе ['image_urls']: выход Scrapy.Request(image_url) def file_path(self, request, response=None, info=None, *, item=None): image_url_hash = hashlib.shake_256(request.url.encode()).hexdigest(5) image_filename = f'{item["name"]}/{image_url_hash}.jpg' вернуть имя_файла_изображения def item_completed(сам, результаты, предмет, информация): image_paths = [x['path'] для ок, x в результатах, если ок] для изображения в image_paths: file_extension = os.path.splitext(изображение)[1] img_path = f'{IMAGES_STORE}{изображение}' md5 = hashlib.md5(open(img_path, 'rb').read()).hexdigest() img_destination = f'{IMAGES_STORE}{item["name"]}/{md5}{file_extension}' os.rename(img_path, img_destination) вернуть изделие Второй вариант — сохранить предыдущую информацию в базе данных
класс DatabasePipeline(): def open_spider(сам, паук): self.client = db_connect() def close_spider(я, паук): сам.клиент.закрыть() defprocess_item(я, предмет, паук): self.client.upsert(пункт) Функция item_completed в первом конвейере возвращает имя и путь, которые я хочу отправить во второй конвейер для хранения в базе данных, но я не могу получить доступ к этим данным.
Вопрос в том, как я могу это сделать?
Спасибо
Здравствуйте, у меня есть два конвейера, первый из которых предназначен для загрузки фотографий:
класс ModelsPipeline(ImagesPipeline): def get_media_requests(self, item, info): для image_url в элементе ['image_urls']: выход Scrapy.Request(image_url) def file_path(self, request, response=None, info=None, *, item=None): image_url_hash = hashlib.shake_256(request.url.encode()).hexdigest(5) image_filename = f'{item["name"]}/{image_url_hash}.jpg' вернуть имя_файла_изображения def item_completed(сам, результаты, предмет, информация): image_paths = [x['path'] для ок, x в результатах, если ок] для изображения в image_paths: file_extension = os.path.splitext(изображение)[1] img_path = f'{IMAGES_STORE}{изображение}' md5 = hashlib.md5(open(img_path, 'rb').read()).hexdigest() img_destination = f'{IMAGES_STORE}{item["name"]}/{md5}{file_extension}' os.rename(img_path, img_destination) вернуть изделие Второй вариант — сохранить предыдущую информацию в базе данных
класс DatabasePipeline(): def open_spider(сам, паук): self.client = db_connect() def close_spider(я, паук): сам.клиент.закрыть() defprocess_item(я, предмет, паук): self.client.upsert(пункт) Функция item_completed в первом конвейере возвращает имя и путь, которые я хочу отправить во второй конвейер для хранения в базе данных, но я не могу получить доступ к этим данным.
Вопрос в том, как я могу это сделать?
Спасибо
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно отправить целочисленное значение с одного экрана на другой
Anonymous » » в форуме Android - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-