Ответы пользователя по тегу Веб-разработка
  • Не могу доделать цикл, нужно чтоб переберало по 1 ссылке, затем сохранял, картинку с сайта с новым именем, цикл есть разные но робит, как быть?

    @javedimka
    Хочу сока
    import requests
    import bs4
    
    
    tut = []
    names = []
    
    r = requests.get('https://vk.com/uporols_you').text
    soup = bs4.BeautifulSoup(r, 'lxml')
    im = soup.find_all('img', class_='ph_img')
    
    for a in im:
        s = a.get('data-src_big').split('|')[0]
        tut.append(s)
    
    for num, link in enumerate(tut):
        p = requests.get(link)
        out = open("img%s.jpg" % (num), 'wb')
        out.write(p.content)
        out.close()


    Все 5 смешных картинок сохранились в папку с именами (img0.jpg, img1.jpg и т.д.)
    for num, link in enumerate(tut, start=1): - если надо чтобы начиналось с 1, а не с нуля.

    Почему у тебя не работало? Ну в первом случае потому что range(1,5) дает последовательность чисел от единицы до 5, не включая 5, т.е. 1, 2, 3, 4. Получается картинок у тебя 5, а имен 4. Потом в один прекрасный момент в твоем цикле:

    for t, a in tut, names:

    переменной t был присвоен линк, а переменной а имя присвоено не было, поэтому ты получил ошибку:

    ValueError: too many values to unpack (expected 2)

    Хардкодить такое вообще странно, можно(не нужно) использовать "in len(range(tut))", а потом когда подскажут про enumerate - использовать enumerate.

    Вот только в первый раз код немного другой у тебя был, с генератором прямо в цикле. Теперь понятно почему я посоветовал посмотреть в генератор?

    Почему у тебя второй вариант не работал? Ну потому что надо понимать как работают вложенные циклы for в питоне. Чтобы понять, можно запустить такой код в интерпретаторе или терминале
    for i in ('a', 'b', 'c', 'd'):
        for x in ('1', '2', '3', '4'):
            print(i + " => " + x)

    Ты просто на каждой итераций 4 раза сохранял одну картинку и присваивал ей разные имена, потом на следующем линке делал тоже самое перезаписывая те 4 сохраненные картинки, в итоге все последние 4 сохраненные картинки это одна и та же картинка с последнего линка.

    Удачи.
    Ответ написан
    4 комментария