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 сохраненные картинки это одна и та же картинка с последнего линка.
Удачи.