Как скачать все со стены группы. Добавление задания на граббинг стены вконтакте с сохранением на компьютер. Граббер свежих постов из поиска

Как скачать все со стены группы. Добавление задания на граббинг стены вконтакте с сохранением на компьютер. Граббер свежих постов из поиска

Введение

Добрый день, давно я ничего не писал - много было причин. За это время накопилось достаточно большое количество материала и я постараюсь его сюда выставить как можно полнее. Сегодня я хочу рассказать о работе с API контакта через Python, а примером послужит - скачивание стены журнала Евгений Онегин. Глава 11 . Если вам лень читать как я всё это делал, а охота поскорее скачать свою стену, переходите сразу к разделу "Отчёт и тестирование".

Подготовка

Первое, что нужно сделать - скачать АПИ и зарегистрировать приложение , получив его идентификатор (если вам не охота регистрировать своё приложения и получать его идентификатор, то просто пропустите этот шаг - по умолчанию программа подставит мой идентификатор приложения) . АПИ доступно по этому адресу https://pypi.python.org/pypi/vkontakte .Там есть инструкция по установке. Если-же не получается по ней, то скачайте файлы, разархивируйте, в терминале выполните (Linux)

$ sudo python2 ./setup.py install $ python2 Python 2.7.5 (default, May 12 2013, 12:00:47) on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import vkontakte
После установки мы можем пользоваться функционалом этой библиотеки, однако с некоторых пор стало обязательным создание окна браузера, чтоб пользователь там ввёл свои логин и пароль, и только потом мы получили token_id для работы с API питона. Чтоб не лезть в эти дебри можно прикинуться окном броузера, фиктивно ввести туда валидные логин и пароль и получить свой законный токен. В этой статье рассказано более подробно про этот маленький хак. В результате статьи был создан класс авторизации, в который сообщается логин, пароль, идентификатор приложения, запрашиваемые права. Я немного подредактировал этот файл, так как он не работал. Скачать мой вариант можно .

Первые шаги

Для первого примера давайте сделаем простую авторизацию с неким запросом.

#!/usr/bin/env python3 # -*- coding: utf-8 -*- import vk_auth import vkontakte def main(): (token,user_id) = vk_auth.auth("$EMAIL", "$PASSWD", "$ID_APP", "$SOPE") vk = vkontakte.API(token=token) print "Hello vk API , server time is ",vk.getServerTime() return 0 if __name__ == "__main__": main()
Ничего сложного - импортируем класс авторизации, импортируем библиотеку c API, получаем токен и идентификатор, используем АПИ-шные функции.

Пример

Теперь пришло время к массивному, серьёзному, а главное практичному примеру - скачивание стены Вконтакте. Идея скачивания стены зародилась из острой необходимости. Паблик Вконтакте организован очень удобно, за одним исключением - старую информацию на стене невозможно найти. Родилась идея - скачать всю стену из паблика и разбить её на несколько HTML фалов для лучшей скорости доступа.
Перед началом работы нужно поставить грамотное техническое задание.

Техническое задание

Скрипт или набор скриптов для скачивания стены из социальной сети Вконтакте.
Входные данные:
  • Имя пользователя
  • Пароль
  • Идентификатор группы\паблика\страницы
  • Количество постов для скачивания
  • Начиная с какого сообщения скачивать
  • На сколько HTML блоков разбивать
Приложение должно скачать всю текстовую и графическую информацию со стены для удобного оффлайн просмотра. Если на стене есть видео или ссылки, то приложение должно сообщить их название и дать ссылку в интернет. Ещё приложение должно скачивать все комментарии к постам и оформлять их должным образом(аналогично постам) .

Реализация

Определимся с каркасом программы и входящими параметрами.
Набросаем пока такой код . Я использовал библиотеку OptionParser для парсинга параметров - она идёт из коробки и о-о-очень удобная. Следующий шаг - организация разбивки на тома. Чуть изменив старый код, мы получаем алгоритм, который разобьёт информацию на необходимое количество томов. Вот код . Далее необходимо использовать vk API и загружать посты из Контакта. Покурив документацию , я быстро нашел необходимую функцию . Апи контакта позволяет отправлять JSON запросы и получать JSON ответы. Используемой нами vkAPI инкапсулирует JSON запросы в список переменных. Не могу сказать, что это очень удобно, но я не нашел другого способа. Для запроса постов со стены определённой группы нам необходимо выполнить следующий код

Posts = vk.get("wall.get", owner_id=owner_id,offset=offset,count=count)
После выполнения этого кода в posts запишется count постов со смещением offset . Стоит обратить внимание, что на количество скачиваемых постов есть ограничение и, если я не ошибаюсь, оно равно 100. Я взял значение 50, как оптимальное количество скачиваемых постов за 1 итерацию цикла. В прошлом листинге я выделил 2 функции: скачивание постов get_posts () и форматирование в HTML posts_to_html() , и поставил на них заглушки. Теперь я заполняю get_posts() кодом, который привёл выше. В техническом задании ещё требовалось скачать все комментарии к коду. Я разделил функцию скачивания постов и оформления их в html, а значит скачивание комментариев должно производиться вместе со скачиванием постов и записываться в одну переменную. Благо, JSON - формат динамический и его несложно дополнить одним полем, в котором будут храниться комментарии.
В документации находим функцию скачивания комментариев и реализуем. Функцию скачивания поста с комментариями разобьём на 2 функции - скачивание поста и скачивание комментариев к нему. Получаем вот такой код:

Def get_comments(vk,owner_id,post_id,count): size = 50 comments = if(count0): post_id = posts[i]["id"] comments = get_comments(vk,owner_id,post_id,coments_count) posts[i]["comments"]["data"]=comments print len(comments),coments_count return posts
Теперь функция get_posts вернёт посты, в которых в поле comments.data будут храниться комментарии к ним.
На этом работа со скачиванием данных закончена.Необходимо ещё из этой всей канители сформировать красивые HTML странички. Скажу честно - для меня это самый адский труд. Но других путей нет - вперёд.

Формирование HTML страниц.

Для формирования я написал целый ряд шаблонов, в которые потом буду вставлять данные из JSON. Я не буду их всех здесь приводить. Просто дам ссылку на готовый проект. Функция, формирования HTML вышла огромная и некрасивая.Если будут люди - профи в HTML, буду им благодарен за более благоприятный дизайн, который более схож с Vk.

Скачивание Данных.

Одним из пунктов ТЗ был удобный локальный просмотр. В данный момент все ссылки на картинки и аудиозаписи - абсолютные (то есть ведут в интернет) а нужно чтоб они лежали рядом и при отсутствии интернета можно было и картинку посмотреть и музычку прослушать. Можно это сделать питоном через жуткую Караганду. Но я предпочёл вариант поэлегантней - wget . Эта стандартная линуксовская интрнето-качалка и она умеет скачивать web-страницу с информацией на ней.Чтобы скормить HTML-ки нужно ещё почитать man wget и найти несколько необходимых ключей.
Получился вот такой скрипт:

$wget -B -k -r -l0 --force-html -i name-*.html -P ./data

Одно только НО - wget скачает всю информацию, но не преобразует ссылки.Может, конечно, он это и умеет делать, но я не нашел как. Поэтому в питоне мы напишем преобразование от любого контактовского адреса хранения фото\аудио в ссылку на рядом лежащую папку {ИмяГруппы}_{НомерТома}data. Я умышленно разделил имя группы и номер тома, чтобы можно было переместить за собой только один том и не тащить за собой несчётное количество информации, которая не используется.

Def convert_lincs(txt,folder,recurce = 0): out = re.sub("http://",folder,txt) return out
Как видите, благодаря мощи регулярных выражений эту задачу мы решили в 1 строку.
Ещё я столкнулся с проблемой постоянно прерывающийся связи (у меня плохой интернет) и отказа со стороны Контакта из-за высокой частоты запросов. Эти 2 фактора периодически валили программу, поэтому я сделал отказоустойчивые обёртки для всех методов обращения в интернет, которые использовал. Получилось вот так:

Def wall_getComments(vk,owner_id,post_id,count,recurce = 0): if (recurce ==20): return try: com = vk.get("wall.getComments", owner_id=owner_id,post_id=post_id,count=count) except: time.sleep(1) print "Error wall_getComments try ",recurce com = wall_getComments(vk,owner_id,post_id,count,recurce = recurce+1) return com def wall_get(vk,owner_id,offset,count,recurce = 0): if (recurce ==20): return try: res = vk.get("wall.get", owner_id=owner_id,offset=offset,count=count) except: time.sleep(1) print "Error wall_get try ",recurce res = wall_get(vk,owner_id,offset,count,recurce = recurce +1) return res def users_get(vk,uids,fields,recurce = 0): if (recurce ==20): return try: res = vk.get("users.get",uids=uids,fields="photo") except: time.sleep(1) print "Error users_get try ",recurce res = users_get(vk,uids,fields,recurce = recurce +1) return res def groups_getById(vk,group_ids,recurce = 0): if (recurce ==20): return try: res = vk.get("groups.getById", group_ids=group_ids) except: time.sleep(1) print "Error groups_getById try ",recurce res = groups_getById(vk,group_ids,recurce = recurce +1) return res
При отказе сети или ошибке получения данных я жду полсекунды и повторяю попытку.

Отчёт и тестирование

Результат работы я публикую на Github . Так, что вы можете присоединиться к проекту, взять мои наработки, добавить свои, переделать под свои нужды и просто развивать проект.
И вот, наконец, тестирование. Обратите внимание на то, что я буду использовать Python2.X и не ругайтесь заранее, увидев что-то вроде этого при попытке запустить программу:

$ python ./WallCopy.py File "./WallCopy.py", line 40 print "%s Failure"%"wall_getComments" ^ SyntaxError: invalid syntax
Программа выдаёт справку на аглицком если запустить её с ключём -h. Для ленивых перевожу на русский:

  • -e EMAIL, --email=EMAIL Имеил для авторизации
  • -p PASSWD, --passwd=PASSWD Пароль для авторизации, если вы его не задали в явном виде, программа попросит вас ввести его вовремя выполнения.Конечно пароль будет невидим.
  • -i GID, --groupid=GID Идентификатор группы, стену которой необходимо скачать
  • -c COUNT, --count=COUNT - количество постов, которые необходимо скачать. Если не задано - выкачивает все записи со стены.
  • -f OFFSET, --offset=OFFSET - смещение, с которого необходимо начать скачивание, если не задано, то 0.
  • -s SPLIT_NUM, --split=SPLIT_NUM - количество блоков, на которые разбить скачанные посты, если не задано, то 1
  • -a APP_ID, --app_id=APP_ID - идентификатор приложения, которое вы получили зарегестрировавшись (если не указано, то используется мой идентификатор приложения)
  • -d DOWNLOAD, --download_all=DOWNLOAD - ключ, который определяет, следует ли загружать мультимедиа. Возможные значения:
    • 0 - Не загружать (по умолчанию)
    • 1 - загружать после того, как основная информация загрузится
Типичный пример использования:

python2 ./WallCopy.py -e EMAIL -i GROUP_ID

При этом загрузятся все записи со стены с нулевым смещением, но ссылки останутся абсолютными. Пароль программа спросит в интерактивном режиме, а остальные опции примут значения по умолчанию.

Расширенный пример использования:

python2 ./WallCopy.py -e EMAIL -p PASSWORD -i GROUP_ID -c 1000 -f 500 -s 8 -a APP_ID -d 1

При этом загрузится 1000 постов со смещением на 500 и разобьётся на 8 томов, и картинки с музыкой загрузятся на компьютер.

На данном этапе есть много вещей, которые программа не поддерживает, а хотелось бы:

  1. Загрузка только фото и игнорирование музыки;
  2. Более похожий дизайн на Vk;
  3. Превью Видео;
  4. Требование Linux (wget)
  5. Поддержка только Python 2.X
  6. Использование ООП
На этом, пожалуй, всё. Буду очень рад обратной связи и талантливых HTML верстальщиков для лучшего дизайна.

Чтобы выгрузить все записи из группы Вконтакте или сохранить посты Вк вам нужно скачать Вкдог и воспользоваться следующей функцией.

Выгрузить все записи из группы вк и сохранить посты:

Граббер на комп.

С помощью этой функции вы можете скачать и сохранить все записи со стены Вк. Грабер может копировать фото вконтакте или сразу сохранить текст и фото (ссылку в вк).
Копировать можно в специальный XML файл (привязка текст+ ссылка на картинку в ВК);
Либо можно скачать фото в папку на комп, а текст сохранить в блокнот, если вам нужна такая возможность- пишите в нашу ТП.
В Вкдоге предусмотрен отдельный парсер текста постов со стены вк на ваш компьютер.

Непростая ситуация обстоит с сохранением видео вконтакте, т.к. это весьма технически затратный процесс. Далеко не у всех юзеров выдержит компьютер и соединение с интернетом, если сохранять видео в несколько потоков или даже в 1 поток, но в фоновом режиме, т.е. чтобы вы могли заниматься чем-то еще помимо этого. Исходя из этого мы не скачивание видео на комп и не перезаливаем его в Вк, поэтому при обычном грабинге видео из источника и постинге к вам в группу Вк, в пост будет добавлено видео из источника, т.е. с его ссылкой, учтите это, пожалуйста.

Также не очень легко для вашего компьютера и соединения с интернетом сохранять на комп и выгружать к вам в группу альбомы фоток Вконтакте, поэтому их мы тоже не парсим в ваших же интересах.

Мы всегда открыты для ваших предложений, и если вам нужно спарсить или выгрузить все записи со стены вк, или что-то другое и нестандартное, то обязательно пишите нам.

С его помощью можно наполнить папку жесткого диска отличными постами для вконтакте, скачанные со стены любой группы.

Если вы еще не пользовались программой Вкдог рекомендую скачать ее и установить на ПК, зарегистрироваться и войти под своим логином.

Подготовим программу для пользования, а точнее добавим аккаунт вконтакте, успешно залогинемся, вставим ключ антикапчи. Как это сделать писалось ранее в этой статье.

Добавление задания на граббинг стены вконтакте с сохранением на компьютер

Жмем кнопку «+ Добавить задание ».

Выполняем последовательно три пункта:

  1. Придумаем и запишем название данного задания, к примеру «мультиварки на компьютер». Странновато, но зато мне понятно, что группа про мультиварки а задание спарсить посты на компьютер. Главное писать, чтоб было понятно вам – название не влияет ни на что.
  2. Выбираем во вкладках тип задания «Граббер на комп».
  3. Из списка аккаунтов нужно указать тот, которым будет осуществляться данное действие.

Жмем «Продолжить».

Появляется окно с названием – «Сохранять на компьютер ».

В нем заполняем два поля:

Откуда грабить. В строку поиска сообществ социальной сети Вконтатке вбиваем ключевые слова, по которым будем искать группу для граббинга. Из выдачи подберем необходимую, я рекомендую вручную открывать и проверять наличие качественных постов для скачивания. Находим нужную и копируем в адресной строке браузера ссылку на нее. Вставляем в строчку (откуда грабить).

В какую папку грабить. Жмем «Обзор» - указываем путь к папке, в которую будем сохранять посты. Если таковой не имеется, то ее нужно создать. Ок - Продолжаем.

Настройка граббинга на компьютер – вирусность постов

В новом окне сразу бросается в глаза верхняя строка, отображающая количество постов в паблике. У меня это 1571.

Я ставлю галочку на случайном копировании постов из группы. Потому что не важна последовательность, я скачаю их все. Интервал между постами ставлю «1». Это ускорит процесс граббинга.

  • Минимум лайков – 20
  • Минимум репостов – 5
  • Минимум комментариев – 0 (это не принципиально).
Напомню, что данные значения выставлять нужно под свои задачи. Чем выше требования будут указаны – тем меньше постов программа награбит, но их качество будет высоко. То есть они востребованы целевой аудиторией!

ГОТОВО! – задание на граббинг постов из вконтакте на компьютер добавлено.

В истории действий видно, как программа грабит посты с указанной группы в папку на жестком диске.

Сохраняются они в файл с расширением.XML.

Выводы

Данный тип задания подходит для тех, кому нужны посты в формате XML. Скачав их с группы по определенным параметрам, Вкдог сохраняет их в один файл.

Вкдог очень полезная программа, которая полна очень полезными функциями для качественного наполнения сообществ вконтакте. Разработчики, стараются отвечать современным потребностям администраторов и СММ специалистов по социальной сети Вконтакте.

По этому если вы планируете зарабатывать на ведении групп вконтакте, то вам просто не обойтись без этого помощника! . Наслаждайтесь работой хорошего софта!

Прогрессивное человечество прекрасно осведомлено о том, что такое социальные сети. При регулярном использовании сайта «в контакте» для общения и налаживания деловых связей, рано или поздно возникает необходимость почистить стену. Стена «в контакте» имеет свойство накапливать хлам в виде ненужных сообщений, случайных записей, спама. Для оптимизации социальной сети разработаны специальные программы для чистки в контакте воспользовавшись которыми можно быстро почистить стену.

Способ очистки первый — скрипт (расширение) VkOpt 2.x

Для того, чтобы быстро почистить стену, нужно установить расширение, чтобы браузер работал. Следует перейти по ссылке http://vkopt.net/download/ - для chrome (для других браузеров смотрите на сайте разработчика ).

После установки скрипта VkOpt 2.x необходимо снова перезапустить браузер, чтобы расширение начало функционировать. Затем следует зайти на vk.com, на главную страницу. На стене появится вкладка «действия», под ней закреплены следующие команды:

  • получение ссылок на фотографии
  • очистка стены

Нам необходимо произвести чистку страницы, поэтому мы выбираем второе. После выполнения действия появиться окно с предложением удалить ненужную информацию с одной, либо с обеих страниц. Если полностью оптимизировать одну страницу, вся информация на другой странице останется. Можно также очистить полностью всю стену.

Способ очистки второй — программа vkbot

Оптимизировать сайт в контакте поможет универсальная программа vkbot. Ее расширенный функционал поможет в один клик очистить стену. Для этого нужно скачать программу здесь http://vkbot.ru/ . После того как программный продукт будет установлен, нужно авторизоваться. Затем нужно совершить следующие действия:

  • выбрать раздел профиль
  • нажать кнопку чистка (удаление)
  • выбрать команду «очистить стену»

После этого программа попросит подтвердить свои действия. Нужно нажать ОК. Затем можно наблюдать за процессом очистки стены. По окончании процесса программа уведомит пользователя о том, что процесс очистки стены завершен.



© 2024 beasthackerz.ru - Браузеры. Аудио. Жесткий диск. Программы. Локальная сеть. Windows