Как быстро спарсить группы 10 000 пользователей ВКонтакте?

  • Автор темы Автор темы codeby
  • Дата начала Дата начала

codeby

Client
Регистрация
25.08.2014
Сообщения
394
Реакции
53
Баллы
28
Друзья, такой вопрос.

Мне нужно спарсить группы и сообщества около 10 000 пользоваталей и засунуть в Эксель файл.

В целом задачу решил так. Прохожусь последовательно циклом по списку ID пользователей, достаю инфу о группах через groups.get и инфу фигачу в таблицу.

Вроде работает, но парсинг занимает 2-3 часа. В то же время через Церебро похожая штука делается за 2-3 минуты. Я бы не заморачивался и пользовался Церебро, но мне нужно более подробная инфа, че то, что даёт Церебро, плюс нужно инфу постоянно обновлять и держать свежатинкой.

Думал сделать через execute, но как оформить не знаю. Дело в том, что groups.get в расширенном формате отдаёт только 1000 результатов и надо через offset проходить некоторых пользователей по несколько раз.

Может кто подскажет логику, как этот процесс ускорить?
 
Насколько я понимаю, Церебро работает через собственно ВК-приложение, а в этом плане у ВК простые правила: чем больше людей установили себе приложение, тем шире лимиты на запросы. Грубо говоря, поскольку Церебро пользуется толпа народу, то их приложению позволяется кошмарить ВК почти без ограничений.
Ты можешь воспользоваться аналогичными льготами, если изобразишь толпу людей. Тебе нужна цепочка: элитный_прокси+ВК_акк+токен, и таких комплектов нужно N штук.

Впрочем, инфу о ново-вступивших в группу можно выкачивать и без этих диких объёмов, просто используй сортировку по дате вступления.
 
Насколько я понимаю, Церебро работает через собственно ВК-приложение, а в этом плане у ВК простые правила: чем больше людей установили себе приложение, тем шире лимиты на запросы. Грубо говоря, поскольку Церебро пользуется толпа народу, то их приложению позволяется кошмарить ВК почти без ограничений.
Ты можешь воспользоваться аналогичными льготами, если изобразишь толпу людей. Тебе нужна цепочка: элитный_прокси+ВК_акк+токен, и таких комплектов нужно N штук.

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

Так смотри
Мне не инфа о нововступивших надо

Мне надо смотреть по каждому юзеру динамику вступления/выхода в разные сообщества

Поэтому я делаю парсинг, сохраняю его, а потом делаю снова и сравниваю что поменялось.

То что Церебро имеет лимити больше - это ясно. Но я токен например получают через приложение Андроида (его ID известен и оно раздаёт токен через строку браузера). У него тоже по идее лимиты нехилые.
 
всё равно, имеются счётчики на однотипные запросы с одного IP, их не обойти без дополнительных акков и проксей
 
всё равно, имеются счётчики на однотипные запросы с одного IP, их не обойти без дополнительных акков и проксей

Ну ладно если бы там в 3-4 раза быстрее. Но тут скорость конкретно выше выходит. Дело скорее в алгоритме.
 
Насколько я понимаю, Церебро работает через собственно ВК-приложение, а в этом плане у ВК простые правила: чем больше людей установили себе приложение, тем шире лимиты на запросы. Грубо говоря, поскольку Церебро пользуется толпа народу, то их приложению позволяется кошмарить ВК почти без ограничений.
Без каких ещё ограничений?
У Церебро таргет 22 763 участника у приложения на текущий момент, это всего на 3 запроса в секунду больше, чем у только что созданного приложения.
Если приложение установило меньше 10 000 человек, то можно совершать 5 запросов в секунду, до 100 000 – 8 запросов, до 1 000 000 – 20 запросов, больше 1 млн. – 35 запросов в секунду.
Ты можешь воспользоваться аналогичными льготами, если изобразишь толпу людей. Тебе нужна цепочка: элитный_прокси+ВК_акк+токен, и таких комплектов нужно N штук.
Бессмысленная затея в данном контексте.
Друзья, такой вопрос.

Мне нужно спарсить группы и сообщества около 10 000 пользоваталей и засунуть в Эксель файл.

В целом задачу решил так. Прохожусь последовательно циклом по списку ID пользователей, достаю инфу о группах через groups.get и инфу фигачу в таблицу.

Вроде работает, но парсинг занимает 2-3 часа. В то же время через Церебро похожая штука делается за 2-3 минуты. Я бы не заморачивался и пользовался Церебро, но мне нужно более подробная инфа, че то, что даёт Церебро, плюс нужно инфу постоянно обновлять и держать свежатинкой.

Думал сделать через execute, но как оформить не знаю. Дело в том, что groups.get в расширенном формате отдаёт только 1000 результатов и надо через offset проходить некоторых пользователей по несколько раз.

Может кто подскажет логику, как этот процесс ускорить?
Для метода groups.get не требуется токен, поэтому просто переключайтесь в многопоточный режим. Потоков 40 дадут ощутимый прирост а-ля Церебро.
 
Для метода groups.get не требуется токен, поэтому просто переключайтесь в многопоточный режим. Потоков 40 дадут ощутимый прирост а-ля Церебро.

К сожалению требуется.
 
Думал сделать через execute, но как оформить не знаю.
Заходите в мои приложения (https://vk.com/apps?act=manage) и редактируете существующее, либо создаете новое.
Далее переходите в Хранимые процедуры, создаете новую процедуру (назовем её, например, groupParse) и вставляете туда этот код ниже:
Код:
Развернуть Свернуть Копировать
var res = [];
var user_num = 0;
var list_user = [Args.user1,Args.user2,Args.user3,Args.user4,Args.user5];

while (user_num < 5) {
var i = 0;
var count = 0;
while (i <= count){
var listgroup=API.groups.get({"user_id":list_user[user_num],"count":1000,"offset":i});
count=listgroup.count;
res = res + [listgroup];
i=i+1000;
}
user_num = user_num + 1;
}
return res;
Пользователи будут передаваться в Args (сделал 5, можно увеличить до 25).
Чтобы обратиться к данному методу, необходимо выполнить GET запрос:
Код:
Развернуть Свернуть Копировать
https://api.vk.com/method/execute.groupParse?user1={-Variable.id1-}&user2={-Variable.id2-}&user3={-Variable.id3-}&user4={-Variable.id4-}&user5={-Variable.id5-}&access_token={-Variable.access_token-}
 
  • Оценить
Реакции: NoN и codeby
Заходите в мои приложения (https://vk.com/apps?act=manage) и редактируете существующее, либо создаете новое.
Далее переходите в Хранимые процедуры, создаете новую процедуру (назовем её, например, groupParse) и вставляете туда этот код ниже:
Код:
Развернуть Свернуть Копировать
var res = [];
var user_num = 0;
var list_user = [Args.user1,Args.user2,Args.user3,Args.user4,Args.user5];

while (user_num < 5) {
var i = 0;
var count = 0;
while (i <= count){
var listgroup=API.groups.get({"user_id":list_user[user_num],"count":1000,"offset":i});
count=listgroup.count;
res = res + [listgroup];
i=i+1000;
}
user_num = user_num + 1;
}
return res;
Пользователи будут передаваться в Args (сделал 5, можно увеличить до 25).
Чтобы обратиться к данному методу, необходимо выполнить GET запрос:
Код:
Развернуть Свернуть Копировать
https://api.vk.com/method/execute.groupParse?user1={-Variable.id1-}&user2={-Variable.id2-}&user3={-Variable.id3-}&user4={-Variable.id4-}&user5={-Variable.id5-}&access_token={-Variable.access_token-}


Благодарю. Я тоже так думал. Но сли у нас в list_user будет 25 пользователей, а затем ещё 2-3 offset, то мы можем выйти за пределы 25 вызовов API в запросе. Или я не так что-то считаю?
 
Благодарю. Я тоже так думал. Но сли у нас в list_user будет 25 пользователей, а затем ещё 2-3 offset, то мы можем выйти за пределы 25 вызовов API в запросе. Или я не так что-то считаю?
Да, извиняюсь, забыл про этот момент.
Поставьте в таком случае ~12 пользователей. Не так много встречается людей с 2к+ сообществ.
 
  • Оценить
Реакции: NoN и codeby
Окей. Я пока не совсем понимаю :) Сегодня затестирую. Посмотрим как будет.
 
Для метода groups.get не требуется токен, поэтому просто переключайтесь в многопоточный режим. Потоков 40 дадут ощутимый прирост а-ля Церебро.
Токен требуется, не нужны особые права (scope).
 
  • Оценить
Реакции: ibred и codeby
@ibred Можете пожалкйста объяснить как получить access_token ?
 
  • Оценить
Реакции: NoN

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)