You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PyWikiBot统计维基百科页面含前机器人的编辑贡献者?

问题:统计维基百科页面机器人编辑者时遗漏前机器人

我编写了如下PyWikiBot代码,用于统计英文维基百科《Planet_of_the_Apes》页面的机器人编辑贡献者:

import pywikibot
import requests
import json

site = pywikibot.Site("en", "wikipedia")
page = pywikibot.Page(site, 'Planet_of_the_Apes')

revisions_initial = page.revisions()
revisions = list(revisions_initial)

bot_contributors_list = []
bot_edits = 0

for Revision in revisions:
    if Revision.anon == False:
        user_check = Revision.user.replace(" ", "_")
        response = requests.get(
            'https://en.wikipedia.org/w/api.php?action=query&list=users&ususers=' + user_check + '&usprop=groups&format=json').text
        response_info = json.loads(response)

        if 'bot' in response_info['query']['users'][0]['groups']:
            bot_contributors_list.append(user_check)
            bot_edits = bot_edits + 1

bot_contributors_set = set(bot_contributors_list)

当前代码返回24个机器人,但实际应包含标注“(Former Bot)”的前机器人,预期总数为31个。需要一个通用方案,让代码适配其他维基百科页面,将前机器人也纳入统计范围。


解决方案

问题根源

原代码仅检查用户当前所属的用户组是否包含bot,但前机器人(Former Bot)的用户组信息里,bot组会被移到**历史用户组(former groups)**中,因此无法被现有逻辑识别。

修改后的代码

import pywikibot

def get_bot_contributors(page_title, site_lang="en", site_family="wikipedia"):
    site = pywikibot.Site(site_lang, site_family)
    page = pywikibot.Page(site, page_title)
    
    # 收集所有非匿名编辑者,去重减少API请求
    all_non_anon_users = set()
    bot_contributors = set()
    bot_edit_count = 0

    for rev in page.revisions():
        if not rev.anon:
            username = rev.user
            all_non_anon_users.add(username)
            # 先标记编辑次数,后续统一验证用户身份
            bot_edit_count += 1

    # 批量验证每个用户是否为机器人(含前机器人)
    for username in all_non_anon_users:
        user = pywikibot.User(site, username)
        # 检查当前组或历史组是否包含bot
        if 'bot' in user.groups or 'bot' in user.former_groups:
            bot_contributors.add(username)

    return bot_contributors, bot_edit_count

# 使用示例
page_title = 'Planet_of_the_Apes'
bots, edit_count = get_bot_contributors(page_title)
print(f"机器人(含前机器人)总数:{len(bots)}")
print(f"机器人编辑总次数:{edit_count}")

关键优化点

  1. 批量去重查询:先收集所有非匿名编辑者并去重,避免重复查询同一用户的信息,提升效率
  2. 利用PyWikiBot内置方法:通过pywikibot.User直接获取用户的groups(当前组)和former_groups(历史组),无需手动拼接API请求,减少出错概率
  3. 通用适配逻辑:函数支持传入不同的页面标题、语言和维基家族,可直接用于其他维基百科页面

内容的提问来源于stack exchange,提问作者Kevin Gonzalez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:57:50