我有一组定义网站结构的链接。从这些链接下载图像时,我想同时将下载的图像放置在类似于网站结构的文件夹结构中,而不仅仅是重命名它(如Scrapy image download how to use custom filename中回答的那样)
我的代码是这样的:
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”函数使用之前会发生变化。