Данная заметка не о том, как парсить социальные сети, а о том, что я обнаружил в социальной сети «Мой Мир Mail.ru». Эта сеть родом из 2007 года до сих пор находиться в перманентно активном состоянии. Более того, в 2019 она была обозначена владельцем как нишевый проект. Но, тем не менее, это не помогло данной сети. И количество пользователей уменьшается с каждым годом.
Тем не менее, там можно отыскать странички разных пользователей. Иногда пользователей блокируют, иногда доступ к странице для незарегистрированных пользователей закрыт. Но, именно это и вызывает много вопросов и удивление.
Обнаружено это было случайно и не бог весть какой баг. Так, небольшая недоработка программистов. Но, даже если на странице висит баннер о том, что страница заблокирована и из всей информации доступно лишь имя пользователя, тем не менее, зайдя в код страницы можно легко обнаружить скрытую на странице информацию.
Более того, если мы продвинемся немного дальше, можно найти ссылки на альбомы, анкеты и прочие пункты меню социальной сети. Более того, по этим ссылкам можно свободно перейти и увидеть информацию пользователя.
С одной стороны ничего особенного в этом нет. Так как пользователь не сам скрывал информацию, а социальная сеть закрыла к ней доступ. Но, нельзя же делать это все так топорно.
Такой вот небольшой баг, что ли. Ну и для его эксплуатации можно использовать код, который приведен ниже. Единственное, что не стал выдергивать в коде, так это ссылки на фото и прочее. Но, тем не менее, сделать это совершенно не трудно самостоятельно.
Спасибо за внимание. Надеюсь, что данная информация будет кому-нибудь полезна
Тем не менее, там можно отыскать странички разных пользователей. Иногда пользователей блокируют, иногда доступ к странице для незарегистрированных пользователей закрыт. Но, именно это и вызывает много вопросов и удивление.
Обнаружено это было случайно и не бог весть какой баг. Так, небольшая недоработка программистов. Но, даже если на странице висит баннер о том, что страница заблокирована и из всей информации доступно лишь имя пользователя, тем не менее, зайдя в код страницы можно легко обнаружить скрытую на странице информацию.
Более того, если мы продвинемся немного дальше, можно найти ссылки на альбомы, анкеты и прочие пункты меню социальной сети. Более того, по этим ссылкам можно свободно перейти и увидеть информацию пользователя.
С одной стороны ничего особенного в этом нет. Так как пользователь не сам скрывал информацию, а социальная сеть закрыла к ней доступ. Но, нельзя же делать это все так топорно.
Такой вот небольшой баг, что ли. Ну и для его эксплуатации можно использовать код, который приведен ниже. Единственное, что не стал выдергивать в коде, так это ссылки на фото и прочее. Но, тем не менее, сделать это совершенно не трудно самостоятельно.
Python:
import requests
from bs4 import BeautifulSoup
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/101.0.4951.54 Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,'
'application/signed-exchange;v=b3;q=0.9 '
}
data_list = []
def mir_mail_check(nickname):
# составляем ссылку и делаем запрос
url = f'https://my.mail.ru/mail/{nickname}/'
req = requests.get(url=url, headers=headers)
# проверяем статус-код, если он 200, то выполняем скрипт дальше
if req.status_code == 200:
# добавляем в список и печатаем данные о сервисе
# так же печатаем инфу о доступности страницы
data_list.append(f'\n\n[Мой мир MailRU]\n{"-"*35}\n')
print(f'\n[Мой мир MailRU]\n{"-"*35}')
print('[+] Страница существует')
data_list.append('[+] Страница существует\n')
print(f'[+] Адрес страницы: {url}')
data_list.append(f'\n[+] Адрес страницы: {url}\n')
soup = BeautifulSoup(req.text, 'lxml')
try:
# проверяем на странице наличие тэга
# если есть, делаем вывод, что это закрытая или заблокированная
# страница, так как данный тэг есть и там, и там
# печатаем это и добавляем запись в список
if soup.find('div', class_='profile-closed ui-simple-block'):
print(' [-] Закрытая или заблокированная страница')
data_list.append(' [-] Закрытая или заблокированная страница\n')
except AttributeError:
pass
try:
# ищем блок с именем и датой последнего посещения
# находим определенные тэги из которых получаем данные
# после чего из объединяем, выводим на печать и добавляем в список
name_date = soup.find('div', class_='profile__content_header_user profile__content_header_user_not-online')
name = name_date.find('h1').text.strip()
visit_date = name_date.find('span', class_='profile__user-status').text.strip()
print(f' [-] {name}\n\t - {visit_date}')
data_list.append(f' [-] {name}\n\t - {visit_date}\n')
except AttributeError:
pass
try:
# получаем информацию о возрасте и адресе
# печатаем и добавляем в список
age_address = soup.find('div', class_='profile__content_mainInfo').find_all('span')
for item in age_address[0:2]:
print(f'\t - {item.text.strip()}')
data_list.append(f'\t - {item.text.strip()}\n')
except AttributeError:
pass
try:
# здесь получаем информацию из блока с кол-вом фото, видео и друзей
# так как все данные не нужны, делаем выборку по друзьям, фото и группам
menulink = soup.find('div', class_='profile__menu').find_all('a', class_='profile__menuLink booster-sc')
for item in menulink:
if item.text.strip()[0:6] == "Друзья":
print(f'\t - {item.text.strip()[0:6]}: {item.text.strip()[6:]}')
data_list.append(f'\t - {item.text.strip()[0:6]}: {item.text.strip()[6:]}\n')
if item.text.strip()[0:4] == "Фото":
print(f'\t - {item.text.strip()[0:4]}: {item.text.strip()[4:]}')
data_list.append(f'\t - {item.text.strip()[0:4]}: {item.text.strip()[4:]}\n')
if item.text.strip()[0:6] == "Группы":
print(f'\t - {item.text.strip()[0:6]}: {item.text.strip()[6:]}')
data_list.append(f'\t - {item.text.strip()[0:6]}: {item.text.strip()[6:]}\n')
except AttributeError:
pass
if req.status_code == 404:
# проверяем статус, если 404
# печатаем, что такой никнейм не существует и добавляем
# об этом инфу в список
data_list.append(f'\n\n[Мой мир MailRU]\n{"-" * 35}\n')
print(f'\n[Мой мир MailRU]\n{"-" * 35}')
print('\n[+] Страница не существует\n')
data_list.append('\n[+] Страница не существует\n')
def main():
nickname = input('[+] Введите никнейм для проверки: ')
mir_mail_check(nickname)
if __name__ == "__main__":
main()
Спасибо за внимание. Надеюсь, что данная информация будет кому-нибудь полезна