Я еще не работал с ImagesPipeline
, но following the documentation, я бы переопределил item_completed(results, items, info)
.
Оригинальное определение:
def item_completed(self, results, item, info):
if self.IMAGES_RESULT_FIELD in item.fields:
item[self.IMAGES_RESULT_FIELD] = [x for ok, x in results if ok]
return item
Это должно дать вам наборы результатов загруженных изображений, включая путь (кажется, там может быть много изображений на один пункт).
Если вы сейчас измените этот метод в подклассе, чтобы переместить все файлы перед установкой пути, он должен работать так, как вы хотите. Вы можете установить целевую папку на своем элементе примерно как item['session_path']
. Вам нужно будет установить этот параметр для каждого элемента, прежде чем возвращать/убирать предметы из паука.
Подкласс с переопределен метод может выглядеть следующим образом:
import os, os.path
from scrapy.contrib.pipeline.images import ImagesPipeline
class SessionImagesPipeline(ImagesPipeline):
def item_completed(self, results, item, info):
# iterate over the local file paths of all downloaded images
for result in [x for ok, x in results if ok]:
path = result['path']
# here we create the session-path where the files should be in the end
# you'll have to change this path creation depending on your needs
target_path = os.path.join((item['session_path'], os.basename(path)))
# try to move the file and raise exception if not possible
if not os.rename(path, target_path):
raise ImageException("Could not move image to target folder")
# here we'll write out the result with the new path,
# if there is a result field on the item (just like the original code does)
if self.IMAGES_RESULT_FIELD in item.fields:
result['path'] = target_path
item[self.IMAGES_RESULT_FIELD].append(result)
return item
Даже лучше было бы установить нужный путь сеанса не в item
, но в конфигурации во время вашего Scrapy перспективе. Для этого вам нужно будет узнать, как настроить конфигурацию во время работы приложения, и вам придется переопределить конструктор, я думаю.
Вы должны сообщить нам, как вы в настоящее время загружаете изображения (некоторый код). С промежуточным ПО? От вашего паука? ...? – Aufziehvogel
ya только от моего паука Я включил конвейер и добавлю путь к папке загрузки, как указано в документах – user3706469
Не знал, что в scrapy включены конвейеры. [Ссылка для других] (http://doc.scrapy.org/en/latest/topics/images.html). – Aufziehvogel