Pull to refresh

Парсим стикеры ВКонтакте с помощью Grab

image

Сегодня я бы хотел показать, как легко можно на 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

На этом все, спасибо за внимание.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.