В этом репозитории представлен набор скриптов для поиска аудитории в VK. Осторожно - в некоторых запросах к VK подразумевается, что аудитория из Омска и возраста 12-19 лет.
Использовать их стоит примерно в этом порядке.
-
xlsx_parser.py - парсит файлы с табличками
-
graph_builder.py - ищет возможные аккаунты людей
-
plot_drawer.py - для исследования полученных данных
-
accepted_links_parser.py - если у вас уже есть подтверждёненые аккаунты, то этот скрипт добавит их куда надо
-
graph_processor.py - выбирает верную версию аккаунта для некоторых людей
-
process_cleaner.py - если вы хотите отменить действия скриптов accepted_links_parser.py и graph_processor.py
-
visualizer.py - создаёт xlsx файл, считываемый gephi для создания графа
-
manual_seeker.py - даёт возможность искать некоторых людей вручную
Полученные результаты смотри в output/members.txt.
Надеюсь, код работает под большинством Linux-систем с python3.
Перед запуском скриптов в корне проекта необходимо выполнить:
- export PYTHONPATH=${PYTHONPATH}:`pwd`
Затем в файле data.py необходимо записать логин и пароль оператора (для части скриптов, работающих с VK API).
Затем следует выполнить команды
- pip3 install openpyxl
- pip3 install json
- pip3 install vk_api
- pip3 install matplotlib
- sudo apt install xdotool
Для запуска скрипта подразумевается, что в директории temp лежат файлы, которые называются так:
- itog_OLYMPINFO.xlsx
Конвертер xls -> xlsx (по 5 штук):
Более того подразумевается, что листы в файлах именованы классами учеников, а также на каждом листе присутствуют столбцы в данном порядке:
- Фамилия Имя Отчество Школа ...(возможен пропуск)... Тип диплома
На выходе получаем json-файл, записанный в output/members.txt. Структура json:
[
{
"name": "Елена",
"surname": "Шкарупа ",
"patronymic": "Александровна",
"school": "ФГБОУ ВО \"ОмГПУ\", Академический лицей",
"diplomas": [
{
"olymp": "PRAVO_9-11",
"class": "11",
"status": "участник" // could be null
}
]
},
{
...
},
...
]
В консоли для каждого листа показывается информация по обработке. Условия обработки листа:
- Есть только одна клетка "Фамилия"
- Есть только одна клетка с подстрокой "диплом"
- Эти две клетки находятся в одной строке
Для запуска скрипта подразумевается, что сформирован файл output/members.txt, например с помощью xlsx_parser.py
Осторожно - vk может запретить вашему аккаунту отправлять запросы на какое-то время. Имейте пулл аккаунтов. Возможно стоит параллелить запросы.
В каждого человека в json-файле добавится поле "vk_pages", где будут перечислены кандидаты на его аккаунт VK.
Для запуска скрипта подразумевается, что был исполнен graph_builder.py
В папке output будет лежать график(и), показывающий статистику по найденным аккаунтам. Для каждого человека уже известны кандидаты, а у каждого кандидата известны друзья. Каждому кандидату сопоставим число N - сколько у него друзей среди всех найденных ранее аккаунтов. Подразумевается - чем больше это число для кандидата, тем больше вероятность для него стать верифицированной страницей.
Тогда каждому человеку можно сопоставить несколько чисел - по одному от каждого кандидата. Пусть M1 - первый максимум в этом списке, M2 - второй максимум.
Графики оперируют с этими числами.
Для запуска скрипта подразумевается, что был исполнен graph_builder.py
В файле temp/links.txt должны по одной в строке лежать верифицированные ссылки на людей - т.е. это те аккаунты VK, которые, вы уверены, принадлежат людям из искомого комьюнити.
Верифицированные ссылки обновят файл output/members.txt
Для запуска скрипта подразумевается, что был исполнен graph_builder.py
Для каждого человека появится поле "processed" (true/false) и поле "official_page", где в случае true будет лежать описание предполагаемой страницы vk человека.
Более того у любого аккаунта, будь он в "vk_pages" или в "official_page", появится поле "probability" - число от 0 до 1. Это вероятность того, что он является официальной страницей.
Для запуска скрипта подразумевается, что был исполнен graph_builder.py и, вероятно, запущен один из этих: accepted_links_parser.py или graph_processor.py
Для каждого человека будут убраны поля "processed", "official_page" и все "probability" у аккаунтов
Для запуска скрипта подразумевается, что был исполнен graph_processor.py
Файл output/graph.xlsx, пригодный для построения графика в gephi
Это такая утилита, которая позволяет строить графики. Принимает на вход лист xlsx файла. Стоит загрузить в один проект оба листа из файла output/graph.xlsx.
После загрузки листов в программу - получим некластеризованный граф. Чтобы получить более или менее красивый граф - сверху в панельке Windows откройте окна Statistics, Appearance, Layout.
В окне Statistics запустите основные подсчёты(нужно для вкладки Appearance потом).
В окне Layout найдите алгоритм OpenOrd и запустите его с настройками EdgeCut=0.7, NumIteration=2000. Мне такие настройки понадобились для графа на 1200 человек. Минимальные изменения этих настроек могут давать разные графы - можно подобрать покрсивей.
В окне Appearance покрастье и выберите размер согласно вашим предпочтениям. Например можно выбрать Размер согласно степени вершины, а цвет согласно школе.
Совет: Если понадобится установить java, то вот:
- sudo apt install openjdk-8-jdk openjdk-8-jre
Для запуска скрипта подразумевается, что сформирован файл output/members.txt
Более того подразумевается, что скрипт запускается в левой части экрана, а гугл хром (именно он!) открыт в правой части экрана
Получится поиск страниц vk в интерактивном формате.
Формат взаимодействия: исключительно через консоль.
Подсказка - взаимодействие улучшается при использовании тачпада и без кликов в область хрома. Так ваше окно terminal остаётся активным и готовым принимать ваши ответы.
Чтобы закончить работу - введите CTRL+C в поле для ввода в консоли