Złomowanie: utwórz strukturę folderów z pobranych obrazów na podstawie adresu URL, z którego pobierane są obrazy

Mam szereg linków, które definiują strukturę strony internetowej. Podczas pobierania obrazów z tych linków chcę jednocześnie umieścić pobrane obrazy w strukturze folderów podobnej do struktury witryny, a nie tylko zmienić jej nazwę (zgodnie z odpowiedzią wPobierz obraz Scrapy, jak używać niestandardowej nazwy pliku)

Mój kod jest taki sam:

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)

Tworzy wymaganą strukturę folderów, ale kiedy wchodzę do folderów w głębi, widzę, że pliki zostały zagubione w folderach.

Podejrzewam, że tak się dzieje, ponieważ funkcje „get_media_requests” i „image_key” mogą wykonywać asynchronicznie, dlatego wartość „page_url” zmienia się, zanim zostanie użyta przez funkcję „image_key”.

questionAnswers(1)

yourAnswerToTheQuestion