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”.