В этом кейсе вы узнаете, как IT-рекрутеры могут автоматизировать поиск кандидатов по никнеймам в Telegram и перевести его из ручного процесса в почти промышленный.
Мы будем использовать информацию об участниках чата в Telegram в качестве базы никнеймов, но вы можете применить любой другой альтернативный источник данных и начинать с 4-го шага.
Шаг 1. Регистрация аккаунта в Telegram через виртуальный номер
Не будем вдаваться в подробности на этом этапе. Вы можете арендовать виртуальный номер через сервисы вроде sms-activate.io, 5sim.biz или onlinesim.io и зарегистрировать новый аккаунт, чтобы не использовать свой личный или рабочий номер. Если Telegram не присылает вам проверочный код при регистрации, просто купите готовый аккаунт на таких площадках, как Plati.Market, lzt.market или funpay.com.
Шаг 2. Регистрация нового приложения в Telegram
-
Перейдите на страницу Telegram для разработчиков:
Перейдите в браузере по следующей ссылке: my.telegram.org.
Войдите в свой Telegram аккаунт, используя номер телефона, который вы используете в приложении Telegram.
-
Создайте новое приложение:
После входа вы попадете на страницу "App Configuration".
Нажмите на кнопку "API Development Tools" или "Создать приложение".
-
Заполните форму с информацией о вашем новом приложении:
App title: Название вашего приложения (например,
MyParserApp
).Short name: Краткое имя для вашего приложения (например,
parser
).Platform: Выберите платформу, на которой будет работать приложение (например,
Desktop
).Description: Можете оставить описание (например,
Application for Telegram data parsing
).
Нажмите "Create" или "Создать".
-
Получите API ID и API Hash:
После создания приложения вы увидите свой
API ID
иAPI Hash
.-
Сохраните эти значения — они потребуются для работы с библиотекой Telethon.
Здесь сторонний гайд с картинками
Если при регистрации приложения у вас вылезет ошибка, то попробуйте обновить страницу, использовать латинские буквы и цифры без пробелов или поменять\выключить VPN
Шаг 3. Парсинг участников Telegram чата
Для примера я буду использовать чат DevOps специалистов (или около того) "@kubernetes_ru". Ваш новый аккаунт должен состоять в данном чате.
Я запускаю код в PyCharm, а моя основная среда разработки - ChatGPT. Претензий к качеству кода не принимаю.
Установите библиотеку telethon -- pip instal thelethon
Скопируйте код ниже и укажите собственные значения в блоке с учетными данными**
from telethon import TelegramClient
from telethon.tl.types import User
# Учетные данные для авторизации
api_id = 'ЗАПОЛНИТЬ' # Ваш api_id
api_hash = 'ЗАПОЛНИТЬ' # Ваш api_hash
phone_number = 'ЗАПОЛНИТЬ' # Ваш номер телефона
channel = '@kubernetes_ru' # Название или ID канала/чата
# Автоматическое создание имени файла на основе имени канала
output_file = f"{channel.replace('@', '')}_users.txt"
# Создаем клиент Telegram с сохранением сессии
client = TelegramClient('session_name', api_id, api_hash)
async def main():
# Авторизация
await client.start(phone=phone_number)
if not await client.is_user_authorized():
print("Не удалось авторизоваться.")
return
print(f"Сбор участников из чата: {channel}")
# Получаем всех участников чата
participants = await client.get_participants(channel)
# Создаем список юзернеймов без @ в начале
usernames = [user.username for user in participants if isinstance(user, User) and user.username]
# Сохранение юзернеймов в файл
with open(output_file, 'w', encoding='utf-8') as f:
f.write('\n'.join(usernames))
print(f"Сохранено {len(usernames)} юзернеймов в файл '{output_file}'.")
# Запуск программы
with client:
client.loop.run_until_complete(main())
В первый раз программа попросит вас ввести номер телефона и код авторизации в Telegram, который поступит через уведомления в приложении. В дальнейшем вводить его не потребуется.
![](https://habrastorage.org/getpro/habr/upload_files/e6a/1fb/aa7/e6a1fbaa7c0ca297f4a2dd4b75026bb7.png)
По результатам работы скрипта данные будут сохранены в txt файл.
![Наша база никнеймов Наша база никнеймов](https://habrastorage.org/getpro/habr/upload_files/4fc/899/d6d/4fc899d6dfc12c8c1d3a90f8f53a0ee7.png)
** Этот скрипт может собирать никнеймы только из чатов с видимыми участниками. Что делать, если участники чата скрыты, я напишу в следующих статьях на своем канале.
![участники в чате видимы участники в чате видимы](https://habrastorage.org/getpro/habr/upload_files/181/307/120/1813071203e21c127bcc160035a74762.png)
Шаг 4. Работа со Snoop
Snoop — это мощный OSINT-инструмент для поиска профилей по никнейму на более чем 4400 различных площадках. Это отечественный проект, который включает в себя поиск по популярным в СНГ ресурсам, а также предлагает удобные настройки, такие как управление регионом поиска. Snoop позволяет искать информацию как точечно по одному никнейму, так и по целым спискам.
Кроме того, Snoop предоставляет ряд опций для настройки поиска:
Вы можете управлять временем ожидания ответа от серверов, чтобы избегать ошибок, вызванных медленным интернет соединением.
Инструмент поддерживает исключение или включение регионов поиска. Можно выбрать поиск только по русскоязычным ресурсам.
Snoop также предлагает возможность поиска по конкретным сайтам из базы данных или использовать динамически обновляемую web-базу из более чем 4000 сайтов .
Будем исходить из того, что вы работаете на Windows.
Как все это делать на MacOS я без понятия :) Смотрите документацию в репрозитории.
Если вы работаете на Linux, то вы и так со всем разберетесь без моих советов.
Демонстрация работы программы выполнена в demo доступе, поиск в котором урезан до 290 площадок, но даже их вполне себе хватает для работы рекрутера. Годовая лицензия с полным доступом стоит 20$ и включает в себя >4400 площадок. Цена очень бюджетная.
Инструкция:
Скачайте архив с github по этой ссылке Snoop_for_Windows.rar
Распакуйте архив и откройте командную строку (Win+R ---> cmd)
-
Чтобы искать информацию по точечно по 1 никнейму перетащите exe-файл в командную строку и добавьте параметры -f ВАШ_ЮЗЕРНЕЙМ -t 9
Запуск программы Результаты поиска Далее вы можете просто скопировать все ссылки в карточку с информацией о кандидате прямо из терминала программы. Открывшееся окно в браузере можете закрыть.
-
Если вы хотите обработать список никнеймов, то скопируйте путь к вашему файлу с никнеймами через left shift + right click
Он будет как-то так "C:\Users\Пользователь\PycharmProjects\pythonProject1\kubernetes_ru_users.txt" -
Перетащите exe файл в терминал как в пункте 3 и добавьте к нему параметры --userlist "ПУТЬ_К ВАШЕМУ_ФАЙЛУ_СО_СПИСКОМ" -t 9
Вы увидите что-то подобное -
Запустите программу и дождитесь ее выполнения.
Закрасил некоторые запрещенные и нежелательные ссылки. Уменьшил базу до 20 значений (см. примечание) В результате выполнения вы получите набор отдельных файлов в нескольких форматах: html, txt и csv.
Вы можете посмотреть их, скопировав путь из браузера в explorer.намекает, что надо бы купить лицензию Откроем какой-нибудь из них. Например в txt формате.
Видим, что такой формат данных не подходит для дальнейшей работы с ними, поэтому сделаем ряд процедур, чтобы сформировать более удобную базу данных в виде csv таблицы.
-
Откроем командную строку прямо из папки. Для этого введите cmd в адресную строку.
-
В открывшемся терминале напишем copy *.txt all_results.txt
-
В результате получим один общий файл с данными для всех наших никнеймов.
С таким документом по прежнему нельзя работать -
Скопируем в нашу IDE следующий код, который почистит данные и отформатирует их в более удобный вид.
import pandas as pd import re def parse_data(filename): data = [] current_username = None current_links = [] with open(filename, 'r', encoding='utf-8') as file: for line in file: line = line.strip() # Пропускаем пустые строки if not line: continue # Поиск юзернейма username_match = re.match(r"Запрашиваемый объект: <(.+?)>", line) if username_match: # Если есть предыдущие ссылки, сохраняем их с текущим юзернеймом if current_username and current_links: data.append({"Username": current_username, "Links": "\n".join(current_links)}) # Обновляем текущий юзернейм и сбрасываем список ссылок current_username = username_match.group(1) current_links = [] continue # Пропускаем строки с "©2020-2024 «Snoop Project» (demo version).Адрес | ресурс" if line.startswith("©2020-2024"): continue # Поиск строк с URL и ресурсами (содержат " | ") if "|" in line: url, _ = line.split(" | ") current_links.append(url.strip()) # Добавляем последние накопленные данные if current_username and current_links: data.append({"Username": current_username, "Links": "\n".join(current_links)}) return data # Имя вашего входного текстового файла input_filename = r'ПУТЬ_К_ВАШЕМУ ФАЙЛУ' # Укажите путь к вашему файлу # Парсинг данных из файла parsed_data = parse_data(input_filename) # Преобразование данных в DataFrame df = pd.DataFrame(parsed_data) # Сохранение данных в Excel output_filename = 'НАЗВАНИЕ_ТАБЛИЦЫ.xlsx' df.to_excel(output_filename, index=False) print(f"Данные успешно сохранены в {output_filename}!")
-
Копируем путь новому файлу со всеми никнеймами через left shift+right click. И вставляем его в новый код. Строчка №47.
-
Запускаем скрипт, получаем сообщение, что таблица успешно сформирована.
-
Открываем новую таблицу и видим, что теперь данные преобразовались в удобный для работы формат.
Если все получилось, то я вас поздравляю. Теперь вы профессиональный сорсер. Можете написать слово OSINT в резюме и просить прибавку к зарплате.
Примечание:
В данном примере я сократил список никнеймов с 8 тысяч до 20 штук для демонстрации. Можно проверить все 8 тысяч, но потребуется значительно больше времени.
Также, помните, что найденные вами ссыли на ресурсы не обязательно связаны с никнеймом целевого кандидата. Чем популярнее ник, тем чаще его используют разные люди.
Заключение
Как вы видите, даже минимальные навыки работы с Python и доступ к любой современной LLM открывает перед IT рекрутером довольно нетривиальные способы поиска кандидатов, а это значит, что вы можете собирать свои почти уникальные базы данных и работать с ними.
Если вас интересует продвинутый сорсинг, подписывайтесь на мою группу "Сорсинг для извращенцев". В ней мы разберем, как извлекать участников из чатов, даже если администратор скрыл их с помощью настроек приватности. Также, если вам нужен внутренний или внешний IT-рекрутер, вы всегда можете связаться со мной в Telegram: @rudenko_telegram.
![](https://habrastorage.org/getpro/habr/upload_files/5e3/f4b/63f/5e3f4b63f4ce259dfc4011f9ed3d2db8.png)
Комментарии (21)
Olegbashilov
08.09.2024 11:34Илья, статья хорошая, но хотелось бы каких-то кейсов с практической пользой.
Чем этот подход лучше, чем Amazinghiring и Podbor.io?
Вижу, что сильно больше источников, но поиск идет только по никнейму из телеграма и многие источники кажутся бесполезными (типа яндекс.музыки и тиктока). Плюс, никнейм в тг может не совпадать с никнеймами в других сервисах (как, например, у меня).rudix0 Автор
08.09.2024 11:34Ты можешь на коленке сформировать себе базу кандидатов за 2 тысячи рублей (цена лицензии). Это займет много времени, но зато почти бесплатно. Я не уверен, что AH и подбор используют такой же движок поиска как snoop, поэтому собранная тобой база может быть относительно уникальной. У данной базы будет много промахов, но ее можно будет использовать для дальнейшего расширения и валидизации профилей и собрать себе сервис вроде potok.io или AH (если они действительно собираются агрегированием информации в интернете).
ky0
08.09.2024 11:34+8Рекрутёр, который придёт ко мне в личку из "какого-то ТГ-канала", а не из контактов моего резюме - то есть не зная моего опыта, стека, пожеланий по условиям труда и зарплате, обречён на очень быстрый провал.
rudix0 Автор
08.09.2024 11:34+1Стоит только указать в вакансии вилку х2 от текущей и все подобные сердитые дяди и тети, которые ругаются, что их достали рекрутеры, сразу же становятся вежливыми и охотно идут на контакт)
ky0
08.09.2024 11:34Меня не достали, честно говоря, даже наоборот - за последнее время стало существенно лучше. Да, поток предложений "у нас вилка до стольки, от скольки у вас в резюме и ещё удалёнка из РФ" стабилен, но сами предлагаемые вакансии по техническим критериям почти всегда релевантные.
Предложения "х2 от текущей" были - но с элементами или полностью менеджерские. Ну или нормальная работа руками - но криптоскам, казино или прочие интересные сферы деятельности :)
Areso
08.09.2024 11:34а как вы узнаете текущую, чтобы "х2" указывать?
Просто, мне кажется, что если вы опубликуете вакансию на лям (после НДФЛ, без учета премий) здесь и сейчас на любой площадке, уже завтра она будет у всех причастных и непричастных.
panzerfaust
08.09.2024 11:34+6Спасибо за лишнее напоминание, что нужно обязательно завязывать с публичностью в сети. Рекрутеры даже с настоящим резюме на руках умудряются составить совершенно искаженное мнение о кандидате. Страшно представить, что будет, если они еще в осинтеров играть начнут.
rudix0 Автор
08.09.2024 11:34Ну это база. Есть крупные системы, которые не просто деанонят, но и проводят контент анализ всех комментариев в сети. Те рекрутеры, которые не понимают, что написано в резюме у кандидатов в осинтеров играть не начнут, т.к они любят играть в "профайлеров"
ialexander
08.09.2024 11:34Я использую генераторов ников, чтобы обеспечить уникальные ники на каждом сервисе. Но есть проблема - когда я делюсь именем ника по каким-либо причинам, часто следует вопрос, а что он означает. На что приходится отвечать, что просто рандомная последовательность букв.
40kTons
08.09.2024 11:34У данного сорсинга есть недостаток - вы исходите из предположения, что у человека на всех сервисах ники одинаковые
rudix0 Автор
08.09.2024 11:34Нет, я про это специально, отдельно написал, что чем более популярный никнейм, тем более часто он будет встречаться. Надо в любом случае обрабатывать базу вручную
kinall
08.09.2024 11:34Даже на скрине видно, что итоговые данные "съехали" по строкам. Что-то тут не то)
Hitriy_Zhuk
Так без ссылки на телегу в ресурсе по ссылке - это вообще гадание на кофейной гущще.
rudix0 Автор
Часто совпадают ник+фотография или ник+должность/технологии