如何使用MediaWiki API获取子子类别中的文章数量

时间:2014-11-30 01:31:44

标签: python api mediawiki wikipedia

我想生成一个xml / json,它显示维基百科中特定类别中所有子子类别的类别信息(页数和子类的数量)。这需要我在数据层次结构中解析2个级别,如类别&gt;子类别列表&gt; <子子类别列表>显示每个子子类别的文章数量。

使用维基百科API,这给了我寻找一个子类别的内容:

http://en.wikipedia.org/w/api.php?action=query&format=json&generator=categorymembers&gcmtitle=Category:People_by_nationality_and_occupation&gcmlimit=30&gcmprop=ids|title&prop=categoryinfo&continue=

这是我正在运行的脚本,它为我提供了子类别的字典,但我无法显示页面计数(categoryinfo)。我怎样才能解决这个问题?

from wikitools import wiki, category, api

def get_category_members (category_name, depth, lang='en'):

articles = {}
if depth < 0:
    return articles

#Begin crawling articles in category
results = wikipedia_query({'list':'categorymembers',
                               'cmtitle': category_name,
                               'cmtype' : 'subcat',
                               'cmlimit': '300',
                               'action' : 'query',
                               'prop' : 'categoryinfo'}, lang)
return results
if 'categorymembers' in results.keys() and len(results['categorymembers']) > 0:
    for i, page in enumerate(results['categorymembers']):
        article = {page['title'] : 'categoryinfo'} 
        articles.update(article)
    return articles

1 个答案:

答案 0 :(得分:1)

如果这是针对维基百科的维基媒体项目,可能更容易依赖Magnus Manske的类别递归工具,例如catscan(参见code logic

据我所知,您的代码不会创建Wiki对象,也不会创建APIRequest,也不会递归地迭代子类别。请参阅我使用categorymembers as generator提取有关类别成员的更多信息的示例(但不是在子类别中递归)。