
Сегодня я бы хотел показать, как легко можно на Python с помощью Grab в несколько строк кода получить изображения всех стикеров из ВКонтакте. Кого заинтересовало, добро пожаловать под кат.
Данная статья расчитана на новичков.
На серверах ВКонтакте картинки стикеров хранятся по таким адресам
https://vk.com/images/stickers/1/128.png
, в котором 1 — номер стикера, а 128 — его размер (64, 128, 256, 512).Наша программа должна скачать все стикеры в определенную папку. Начнем.
Инициализируем объект Grab для работы с библиотекой.
from grab import Grab # импортируем из библиотеки grab метод Grab
g = Grab() # определяем в нашей программе
Отправляем запрос на картинку по адресу. Для себя я буду загружать стикеры в разрешении 128x128.
g.go('https://vk.com/images/stickers/%s/128.png' % (id)) # id - номер стикера
Для сохранения в файл полученного изображения, используем стандартные средства Python.
f = open('vkstickers/%s.png' % (id), 'wb') # открываем файл (например vkstickers/1.png) в режиме двоичной записи
f.write(g.response.body) # записываем в файл тело ответа на запрос
f.close() # закрываем файл
Теперь нам нужно автоматизировать процесс изменения ID стикера. Для этого используем цикл while.
id = 0
while id != -1:
id += 1
g.go('https://vk.com/images/
/%s/128.png' % (id))
f = open('vkstickers/%s.png' % (id), 'wb')
f.write(g.response.body)
f.close()
print(id) # для слежения за процессом парсинга
Чтобы наша программа во время выполнения не вышла за диапазон существующих стикеров, добавим в цикл условие, проверяющее возвращаемый код страницы.
# запрос
if g.response.code == 200:
# сохранение в файл
else:
id = -1
Наша программа готова. Она нам за небольшое время скачает в папку «vkstickers» все стикеры, на данный момент используемые в ВКонтакте.

Окончательный код программы:
from grab import Grab
g = Grab()
id = 0
while id != -1:
id += 1
g.go('https://vk.com/images/stickers/%s/128.png' % (id))
if g.response.code == 200:
f = open('vkstickers/%s.png' % (id), 'wb')
f.write(g.response.body)
f.close()
print(id)
else:
id = -1
На этом все, спасибо за внимание.