Задать вопрос

Как сохранить спарсенные изображения в разные папки?

Есть задача спарсить изображения с одного сайта. Это изображения объектов недвижимости. Сохраняются они у меня все в одну папку. Вопрос следующий: как мне сохранять их в разные папки соответсвенно объекту недвижимости?

Код сейчас такой:
from urllib.request import urlopen
from urllib.parse import urljoin
from lxml.html import fromstring
import xlsxwriter
 
URL = 'http://amberstarluxury.pt/index.php/ru/2013-07-22-01-32-36'
ITEM_PATH = '.display .propertyaddress'
 
def parse_amber():
    f = urlopen(URL)
    list_html = f.read().decode('utf-8')
    list_doc = fromstring(list_html)
 
    ambers = []

    num = 0

    for elem in list_doc.cssselect(ITEM_PATH):
        a = elem.cssselect('a')[0]
        href = a.get('href')
        name = a.text.strip()
      
        houseUrl = urljoin(URL, href)
           
        amber = {'name':name, 'url':houseUrl}

        #идем внутрь
        detailHouseHtml = urlopen(houseUrl).read().decode('utf-8')
        detailHouseDoc = fromstring(detailHouseHtml)

        #селектор галереи, который здесь без класса :( поэтому делаем  [1][-1]
        galaryList = detailHouseDoc.cssselect('.jwts_tabbertab')[1][-1]
        for pic in galaryList:
            galImg = pic.cssselect('a')
            for picUrl in galImg:
                galImgHref =  picUrl.get('href')
                uopen = urlopen(galImgHref)
                stream = uopen.read()
                file = open('houses/{0}'.format(galImgHref[-10:]),'wb')
                # имена картинок я просто срезаю срезами
                file.write(stream)
                file.close()
                print(galImgHref)

        ambers.append(amber)

        num += 1
        print(num)
  
    return ambers 

 
def export_excel(filename, ambers):
    workbook = xlsxwriter.Workbook(filename)
    worksheet = workbook.add_worksheet()
 
    bold = workbook.add_format({'bold':True})
    field_names = ('Название', 'Описание', 'Ссылка', 'Характеристики')
    for i, field in enumerate(field_names):
        worksheet.write(0, i, field, bold)
 
    fields = ('name', 'descr', 'url')
    for row, amber in enumerate(ambers, start=1):
        for col, field in enumerate(fields):
            worksheet.write(row, col, amber[field])
        for har in amber['har']:
            col +=1
            worksheet.write(row, col, har)
 
    workbook.close( )
 
 
def main():
    ambers = parse_amber()
    # export_excel('amber.xlsx', ambers)
 
if __name__ == '__main__':
    main()
  • Вопрос задан
  • 373 просмотра
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Animkim
Питон вокруг меня
Может вам нужен os.mkdir()?
Сложно в коде понять, но вы же где то перескакиваете с одного объекта на другой, на каждый объект создаете директорию и картинки сохраняете туда и так по кругу.
Ответ написан
Комментировать
LazyTalent
@LazyTalent
Data Engineer, Freelancer
Я делал так:
class SaveImg():
    def __init__(self, new_dir_name, images_url):
        os.chdir('images')
        os.mkdir(str(new_dir_name))
        os.chdir(str(new_dir_name))

        count = 1
        for img in images_url:
            img_name = str(count) + '.jpg'
            try:
                urlretrieve(img, img_name)
                count += 1
            except ContentTooShortError as e:
                print(e)
                continue

        os.chdir('..')
        os.chdir('..')
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы