Я использую скрапу для захвата нескольких изображений.Я сохраняю их в отдельных полях.Из-за зависимостей от других систем я не хочу, чтобы все результаты изображений (URL, путь, контрольная сумма) сохранялись в одном поле.
Результаты (URL, путь, контрольная сумма) хранятся в;
Наконец-то у меня все работает, где оноскачивает 2 картинки.Результаты для image_url1 хранятся в images1.Только он не сохраняет результаты для image_url2 в images2.Я не знаю, как я понимаю, что результаты для image_url2 должны быть сохранены в images2.Если я сейчас запусту следующий код, он попытается сложить вместе 2 результата (url, path, checkum) (результаты image_url1 и image_url2 друг за другом разделены пробелом).Он не может вставить это поле в MySQL, так что происходит сбой.
class GooutImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
for image_url in item['image_url1']:
yield scrapy.Request(image_url)
for image_url in item['image_url2']:
yield scrapy.Request(image_url)
Я уже сделал следующие изменения в настройках;
IMAGES_URLS_FIELD = 'image_url1'
IMAGES_RESULT_FIELD = 'images1'
Я не могу найти ничего, как работать с несколькими изображениямиполя.
*** Редактировать / Решение после обратной связи После предложения сделать это в item_completed, я придумываю следующее:
class GooutImagesPipeline(ImagesPipeline):
def get_media_requests(self, item, info):
if item['image_url1']:
for image_url in item['image_url1']:
yield scrapy.Request(image_url)
if item['image_url2']:
for image_url in item['image_url2']:
yield scrapy.Request(image_url)
def item_completed(self, results, item, info):
for download_status, result in results:
if result['url'] == item['image_url1'][0]:
item['images1'] = result['path']
if result['url'] == item['image_url2'][0]:
item['images2'] = result['path']
return item
Не знаю, является ли это лучшим способомсделай это, но это работает.Обратная связь приветствуется.Спасибо!