Scrapy: создать структуру папок из загруженных изображений на основе URL, из которого загружаются изображения
У меня есть массив ссылок, которые определяют структуру сайта. При загрузке изображений по этим ссылкам я хочу одновременно поместить загруженные изображения в структуру папок, аналогичную структуре веб-сайта, а не просто переименовать ее (как ответили вScrapy Image скачать как использовать пользовательское имя файла)
Мой код для того же выглядит так:
class MyImagesPipeline(ImagesPipeline):
"""Custom image pipeline to rename images as they are being downloaded"""
page_url=None
def image_key(self, url):
page_url=self.page_url
image_guid = url.split('/')[-1]
return '%s/%s/%s' % (page_url,image_guid.split('_')[0],image_guid)
def get_media_requests(self, item, info):
#http://store.abc.com/b/n/s/m
os.system('mkdir '+item['sku'][0].encode('ascii','ignore'))
self.page_url = urlparse(item['start_url']).path #I store the parent page's url in start_url Field
for image_url in item['image_urls']:
yield Request(image_url)
Он создает требуемую структуру папок, но когда я углубляюсь в папки, я вижу, что файлы неуместны в папках.
Я подозреваю, что это происходит потому, что функции «get_media_requests» и «image_key» могут выполняться асинхронно, поэтому значение «page_url» изменяется до того, как оно используется функцией «image_key».