logo NodeSeekbeta

用户等级统计

LV0 LV1 LV2 LV3 LV4 LV5 LV6 Total
4831 9102 2948 1738 955 443 208 20225

image.png
发现了一个小bug:按照最大用户序号来计算用户总数是不合理的,因为有一些不存在的账号例如uid3 @酒神

顺便附上gpt写的代码

import logging
import undetected_chromedriver as uc
from apscheduler.schedulers.background import BackgroundScheduler
from bs4 import BeautifulSoup
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time

# 设置 apscheduler 日志级别
logging.getLogger('apscheduler').setLevel(logging.ERROR)

# 初始化浏览器
options = uc.ChromeOptions()
options.headless = False  # 设置为无头模式或窗口模式
driver = uc.Chrome(options=options)

# 定义一个全局变量来存储统计数据
number_counts = {str(i): 0 for i in range(7)}  # 0-6的初始统计值
user_count = 0  # 计数用户ID
lv_counts = {str(i): 0 for i in range(7)}  # 0-6 的初始统计值

def check_content(seq_num):
    """访问指定序号的页面,并检查特定元素的内容。"""
    url = f"https://www.nodeseek.com/space/{seq_num}#/general"
    driver.get(url)

    try:
        # 等待目标元素加载完成
        WebDriverWait(driver, 15).until(
            EC.presence_of_element_located((By.CSS_SELECTOR, "body"))
        )

        # 尝试查找等级元素
        value_element_locator = (By.CSS_SELECTOR, "#nsk-frame > div > div.selector > div.card-block > div:nth-child(2) > div.value")
        value_element = WebDriverWait(driver, 10).until(
            EC.visibility_of_element_located(value_element_locator)
        )

        # 获取页面内容
        soup = BeautifulSoup(driver.page_source, 'html.parser')

        # 查找特定元素内容
        value_element = soup.select_one("#nsk-frame > div > div.selector > div.card-block > div:nth-child(2) > div.value")

        if value_element:
            value = value_element.text.strip()
            if value in number_counts:
                number_counts[value] += 1
                lv_counts[value] += 1
                print(f"用户ID: {seq_num}, 等级: {value}")  # 输出用户ID和等级
            else:
                print(f"用户ID: {seq_num},等级不在统计范围内")
        else:
            # 如果没有找到等级,输出用户不存在
            print(f"用户ID: {seq_num},用户不存在")

    except Exception:
        # 如果任何异常,输出用户不存在
        print(f"用户ID: {seq_num},用户不存在")

def scheduled_job():
    """定义调度任务,按序号递增探测页面内容。"""
    global seq_number, user_count

    check_content(seq_number)
    user_count += 1
    seq_number += 1  # 序号递增

    # 每100个用户输出一次统计
    if user_count % 100 == 0:
        print(f"\n统计到 {user_count} 用户,LV统计数据: {lv_counts}\n")

# 设置初始序号
seq_number = 1
# 创建调度器,允许最多2个并发任务
scheduler = BackgroundScheduler()
scheduler.add_job(scheduled_job, 'interval', seconds=3, max_instances=1)  # 每5秒爬取一个页面,允许最多2个并发
scheduler.start()

try:
    # 主程序持续运行
    while True:
        time.sleep(1)
except (KeyboardInterrupt, SystemExit):
    # 捕捉退出信号,输出最终统计并停止调度器
    print(f"\n程序退出,总共统计到 {user_count} 用户,最终LV统计数据: {lv_counts}\n")
    scheduler.shutdown()
    driver.quit()
12345
  • 侧面证明了其他坛友的想法,升lv2的鸡腿量是升lv1的4倍,要求有点高

  • 矮油 这个1这么多

  • 我还以为6级遍地跑原来才这么点

  • hh 1%

  • xhj006

  • 原来六级才这么点

  • 我一级我骄傲,我是论坛的顶梁柱 xhj002

  • xhj005

  • 我好歹也是最早几个满级的,现在鸡腿都超满级需求几倍了,也不知道啥时候开放新等级

12345

你好啊,陌生人!

我的朋友,看起来你是新来的,如果想参与到讨论中,点击下面的按钮!

📈用户数目📈

目前论坛共有72033位seeker

🎉欢迎新用户🎉