Вы никогда не думали над тем насколько ценным ресурсом могут быть социальные сети, когда речь заходит о социологических и психологических исследованиях? Только подумайте сотни тысяч людей, которые выкладывают о себе информацию в электронном виде. Только возьми, разпарси, обработай эти данные и ценные крупицы знания о человеческом поведении у тебя в кармане (иллюминаты, читающие блог, вам привет 🙂 △ ). А если серьезно, конечно, никакой сложной информации таким методом получить не выйдет, но определенную статистику вполне получить можно…
Так вот, вас никогда не интересовала статистика того какой процент пользователей вк скрывают свой возраст на страничке, и какое соотношение мужчин и женщин среди них. Честно, меня не особо. Но больно захотелось применить Python на чем-то более менее полезном, и тогда была придумана эта немного искусственная задача. Зато вполне соответствующая области применения питона.
Вообщем, после создание своего приложения на странице ВК для разработчиков, перед вами открывается безграничные возможности для сбора статистики общедоступных данных из вк.

После этого был написан вот такой скрипт:
import urllib.request import json startId = #тут id с которого начинается скан i = 0 count = 2000000 countInOneRequest = 200 token = '' # тут токен вашего приложения allMale = 0 allFemale = 0 withBDateMale = 0 withBDateFemale = 0 withAgeMale = 0 withAgeFemale = 0 while i < count: current = i+startId url ='https://api.vk.com/method/users.get?user_ids=' while current <= i+startId+countInOneRequest: url += str(current)+',' current+=1 url = url[0:len(url)-1] url += '&fields=bdate,sex&access_token=' + token + '&v=V ' print(url) response = urllib.request.urlopen(url) for elem in json.loads(response.read())['response']: #print(elem) if elem['first_name']!='DELETED': if elem['sex'] == 1: if 'bdate' in elem: withBDateFemale+=1 if elem['bdate'].count('.')==2: withAgeFemale+=1 allFemale += 1 if elem['sex'] ==2: if 'bdate' in elem: withBDateMale+=1 if elem['bdate'].count('.') == 2: withAgeMale+=1 allMale += 1 i +=countInOneRequest+1 print('Current '+str(i)+' '+' / '+str(count)) print('All Male: ' + str(allMale)) print('With Birth Day :' + str(withBDateMale)) print('With Age:' + str(withAgeMale)) print('All Female: ' + str(allFemale)) print('With Birth Day :' + str(withBDateFemale)) print('With Age:' + str(withAgeFemale)) print('END') print('All Male: ' + str(allMale)) print('With Birth Day :' + str(withBDateMale)) print('With Age:' + str(withAgeMale)) print('All Female: ' + str(allFemale)) print('With Birth Day :' + str(withBDateFemale)) print('With Age:' + str(withAgeFemale))
Вообщем принцип действия прост:
- Отправляем get-запрос методу который возвращает информацию о пользователях, при этом формируем запрос сразу на 200 пользователей (так реально быстрее).
- Парсим полученный json в пайтоновский set и итерируемся по каждому элементу
- Проверяем что пользователь не является удаленным
- Если не удален, смотрим на пол пользователя и переходим по соответствующему условному блоку.
- В этом условно блоке смотрим вернулась ли информация с сервера о дате рождения пользователя, если да то в каком виде ( с годом рождения или без).
- Увеличиваем соответствующие счетчики.
Вообщем скрипт проработал у меня примерно час, и за это время он собрал информацию о 2 миллионах пользователях. Вот результат:
В целом оказалось что женщины чаще ставят дату рождения (21 % среди мужчин против почти 24% женщин). Однако полную дату рождения с годом мужчины ставят чаще чем женщины (12,4 % среди мужчин против 11% женщин). Оно и понятно: мужчины более скрытны по своей природе, однако если решил поставить дату то и год скрывать нечего. А о возрасте дамы говорить не культурно, поэтому дамы готовы делится информацией о дне рождения, но не о своем возрасте.
Вот таким нехитрым образом можно парсить сайты и собирать всякую инфу)) Спасибо за внимание!