Этот скрипт предназначен для парсинга профилей пользователей с форума. Он проходит по страницам пользователей, начиная с указанного 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. В конце работы будет выведена информация о количестве пользователей с каждым типом префикса.
Код:
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
=
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
(
)