维基百科Python API - 防止隐藏类别

时间:2015-06-06 17:16:58

标签: python wikipedia

我想找到与给定主题相关的主题以及多个主题之间的关系程度。为此,我尝试提取主题的Wiki页面并使用主题的类别(在页面底部给出)构建分类法。我想使用维基百科的Python API(https://wikipedia.readthedocs.org/en/latest/code.html#api)。但是当我提取类别时,它也返回隐藏的类别,这些类别通常在Wiki页面上不可见。

import wikipedia

import requests
import pprint
from bs4 import BeautifulSoup
wikipedia.set_lang("en")
query = raw_input()
WikiPage = wikipedia.page(title = query,auto_suggest = True)
cat = WikiPage.categories
for i in cat:
    print i

我知道另一种选择是使用刮刀。但我想使用API​​来做到这一点。

1 个答案:

答案 0 :(得分:0)

你绝对可以使用API​​。只需将&clshow=!hidden附加到您的类别查询中,如下所示:

http://en.wikipedia.org/w/api.php?action=query&titles=Stack%20Overflow&prop=categories&clshow=!hidden

(我在这里假设英语维基百科,但API无处不在。

另外,要明确一点:维基百科没有“Python API”,只有MediaWiki API,你可以从任何编程语言调用。在您的示例代码中,您使用a Python librarymany之一)来访问Wikipedia API。此库似乎没有排除隐藏类别的选项。有关其他可能更灵活的Python库的列表,请参阅http://www.mediawiki.org/wiki/API:Client_code#Python。对于像你这样的简单任务,我个人非常喜欢wikitools。它看起来像这样:

from wikitools.wiki import Wiki
from wikitools.api import APIRequest

site = Wiki("http://fa.wikipedia.org/w/api.php") 
site.login("username", "password")

params = {
          "action": "query",
          "titles": "سرریز_پشته",
          "prop": "categories",
          "clshow": "!hidden",
         }

request = APIRequest(site, params)
result = request.query()

echo result