ставь чайник, зажигай плиту
-
Автор темы
- #1
Простой скрипт, который парсит основую информацию с профиля юг и сохраняет её.
Для работы необходимо создать также файл cookie.txt с куки вашего аккаунта (document.cookie в консоль браузера)
Куки нужны для обхода js проверки от кфа и парса челов в бане
Модули для установки: requests, sty, beautifulsoup4
Для работы необходимо создать также файл cookie.txt с куки вашего аккаунта (document.cookie в консоль браузера)
Куки нужны для обхода js проверки от кфа и парса челов в бане
Модули для установки: requests, sty, beautifulsoup4
Python:
import ctypes, requests, json, os
from sty import fg
from bs4 import BeautifulSoup as bs
# to show colors
ctypes.windll.kernel32.SetConsoleMode(ctypes.windll.kernel32.GetStdHandle(-11), 7)
# console title
ctypes.windll.kernel32.SetConsoleTitleW('YouGame parser by Flowseal')
try:
os.mkdir("accounts")
except:
pass
try:
with open('cookie.txt') as f:
cookie = f.read()
except:
print(fg.li_red + 'cookie.txt not found!' + fg.rs)
raise
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36 OPR/75.0.3969.285',
'cookie': cookie
}
class ParseError(Exception):
pass
def parse(link):
output = {}
req = requests.get(link, headers=headers)
if req.status_code not in [503, 200]:
print(fg.li_red + '\nНевозможно обработать ссылку: нет подключения' + fg.rs)
raise Exception(f'Incorrect status code: {req.status_code}')
soup = bs(req.content, 'html.parser')
name_block = soup.find('span', class_='username')
if not name_block:
print(fg.li_red + '\nНевозможно обработать ссылку.' + fg.rs + ' Возможные причины:\n- Captcha\n- Профиль скрыт\n- Невалидные cookie')
raise ParseError('Wrong document structure')
username = name_block.find('span').text
role = ''.join(soup.find('em', class_='userBanner').find_all(text=True)).strip()
uid = name_block["data-user-id"]
date = soup.find_all('div', class_='memberHeader-blurb')[1].find('time').text
messages = ''.join(soup.find_all('div', class_='memberHeader-content')[1].find('dt', text='Сообщения').parent.find('dd').find_all(text=True)).strip()
reactions = ''.join(soup.find_all('div', class_='memberHeader-content')[1].find('dt', text='Реакции').parent.find('dd').find_all(text=True)).strip()
output.update({'username': username, 'role': role, 'uid': uid, 'date': date, 'messages': messages, 'reactions': reactions})
donation = soup.find_all('div', class_='memberHeader-content')[1].find('dt', title='Пожертвовал')
if donation:
donated = donation.parent.find('dd').text.strip()
output.update({'donated': donated})
viewers = soup.find('span', class_='viewCount').text
output.update({'viewers': viewers})
return output
if __name__ == '__main__':
while True:
link = input('\nВведите ссылку на аккаунт: ')
while link.find('https://yougame.biz/') == -1 or link[len(link)-1] != '/':
print(f'\n{fg.li_red}Введена ссылка невалидного формата.{fg.rs} Примеры {fg.green}правильной{fg.rs} ссылки:\n- https://yougame.biz/flowseal/\n- https://yougame.biz/members/82060/')
link = input('\nВведите ссылку на аккаунт: ')
output = parse(link)
for key in output:
print(f'{key}: {output[key]}')
with open(f'accounts/{output["username"]}.json', 'w') as f:
json.dump(output, f)