- 13
- 4
Этот скрипт предназначен для парсинга профилей пользователей с форума. Он проходит по страницам пользователей, начиная с указанного ID, и собирает данные о никнейме и префиксе пользователя.
То что поддерживается на данный момент:
- Проверенный
- Администратор
- Всефорумный модератор
- BH Team
- Забаненный
- Обычный пользователь
- Друг
- Модератор
- Кастомные префиксы (например, "Няшка :з")
- Данные о пользователях записываются в файл user_data.txt.
Использование:
1. Скачайте или скопируйте код и сохраните его в файл.
2. Перед запуском убедитесь, что у вас установлен Python 3.x и необходимые библиотеки:
- requests
- beautifulsoup4
3. Запустите скрипт. В файле last_processed_id.txt указывается ID пользователя, с которого нужно начать парсинг (по умолчанию это будет 1).
4. Скрипт будет собирать данные и записывать их в файл user_data.txt, а также обновлять статистику по каждому типу префикса.
5. В конце работы будет выведена информация о количестве пользователей с каждым типом префикса.
Код:
То что поддерживается на данный момент:
- Проверенный
- Администратор
- Всефорумный модератор
- BH Team
- Забаненный
- Обычный пользователь
- Друг
- Модератор
- Кастомные префиксы (например, "Няшка :з")
- Данные о пользователях записываются в файл user_data.txt.
Использование:
1. Скачайте или скопируйте код и сохраните его в файл.
2. Перед запуском убедитесь, что у вас установлен Python 3.x и необходимые библиотеки:
- requests
- beautifulsoup4
3. Запустите скрипт. В файле last_processed_id.txt указывается ID пользователя, с которого нужно начать парсинг (по умолчанию это будет 1).
4. Скрипт будет собирать данные и записывать их в файл user_data.txt, а также обновлять статистику по каждому типу префикса.
5. В конце работы будет выведена информация о количестве пользователей с каждым типом префикса.
Код:
Python:
import requests
from bs4 import BeautifulSoup
import time
def get_user_data(member_id):
url = f'https://www.blast.hk/members/{member_id}'
try:
response = requests.get(url)
response.encoding = 'utf-8'
if response.status_code == 200:
soup = BeautifulSoup(response.text, 'html.parser')
error_message = soup.find('div', class_='blockMessage')
if error_message and 'Запрашиваемый пользователь не найден' in error_message.text:
return None, f"Пользователь {member_id} не найден"
username_tag = soup.find('span', class_='username')
username = username_tag.get_text(strip=True) if username_tag else 'Не найден'
prefix = get_user_prefix(soup)
return username, prefix
elif response.status_code == 404:
return None, f"Пользователь {member_id} не существует"
else:
return None, f"Ошибка {response.status_code} при запросе к {url}"
except Exception as e:
return None, f"Ошибка при запросе {url}: {e}"
def get_user_prefix(soup):
user_banner_tag = soup.find('em', class_='userBanner')
if user_banner_tag:
return user_banner_tag.get_text(strip=True)
user_title_tag = soup.find('span', class_='userTitle')
return user_title_tag.get_text(strip=True) if user_title_tag else 'Не указан'
def get_last_processed_id():
try:
with open('last_processed_id.txt', 'r') as f:
return int(f.read().strip())
except FileNotFoundError:
return 1
def save_last_processed_id(member_id):
with open('last_processed_id.txt', 'w') as f:
f.write(str(member_id))
def append_data_to_file(user_data):
with open('user_data.txt', 'a', encoding='utf-8') as f:
f.writelines(user_data)
def main():
last_processed_id = get_last_processed_id()
user_data = []
prefix_count = {
"Проверенный": 0,
"Администратор": 0,
"Всефорумный модератор": 0,
"BH Team": 0,
"Забаненный": 0,
"Обычный пользователь": 0,
"Друг": 0,
"Модератор": 0,
"Не указан": 0
}
requests_per_second = 15
delay = 1 / requests_per_second
print("Запуск парсинга...")
while last_processed_id <= 573685:
username, prefix = get_user_data(last_processed_id)
if username:
if prefix != 'Не указан':
print(f"{last_processed_id} | {username} | {prefix}")
user_data.append(f"{last_processed_id} | {username} | {prefix}\n")
prefix_count[prefix] = prefix_count.get(prefix, 0) + 1
else:
print(f"{last_processed_id} | {username} | {prefix}")
if len(user_data) >= 50:
append_data_to_file(user_data)
user_data = []
save_last_processed_id(last_processed_id)
last_processed_id += 1
time.sleep(delay)
if user_data:
append_data_to_file(user_data)
with open('user_data.txt', 'a', encoding='utf-8') as f:
f.write("\nОбщее количество пользователей по префиксам:\n")
for prefix, count in prefix_count.items():
f.write(f"{prefix} — {count}\n")
print("Парсинг завершен.")
if __name__ == "__main__":
main()