在python中获取维基百科文章的类别

时间:2018-01-21 10:26:08

标签: python wikipedia wikipedia-api

我使用下面提到的代码来检查维基百科页面是否存在。

term = "forensics"
a = urllib.request.urlopen("https://en.wikipedia.org/wiki/"+term).getcode()
print(a) 

如果页面存在(即 a == 200 ),我想获得页面的类别(即,如果类别是计算机科学,工程等)。我们可以在维基百科api中这样做吗?

2 个答案:

答案 0 :(得分:3)

使用pywikibot,您可以获得页面forensics的类别:

>>> import pywikibot as pw
>>> pw.Page(pw.Site('en'), 'forensics')
Page(Forensics)
>>> pw.Page(pw.Site('en'), 'forensics').exists()
True
>>> pw.Page(pw.Site('en'), 'forensics').categories()
<pywikibot.data.api.PageGenerator object at 0x7fea9d44ca90>
>>> list(pw.Page(pw.Site('en'), 'forensics').categories())
[Category(Category:Printworthy redirects), Category(Category:Redirects from short names), Category(Category:Redirects mentioned in hatnotes), Category(Category:Redirects with history)]
>>> [i.title() for i in list(pw.Page(pw.Site('en'), 'forensics').categories())]
[u'Category:Printworthy redirects', u'Category:Redirects from short names', u'Category:Redirects mentioned in hatnotes', u'Category:Redirects with history']

但我认为这不是你想要的。 forensicsredirect page。您需要获取目标页面名称,并获取此新页面的类别。

>>> pw.Page(pw.Site('en'), 'forensics').isRedirectPage()
True
>>> pw.Page(pw.Site('en'), 'forensics').getRedirectTarget()
Page(Forensic science)

另一种解决方案是解析谈话页面,例如从Talk:Forensic_science获取Law Enforcement字符串以及{{WikiProject ...}}中存在的其他字符串。使用page.toggleTalkPage()获取与谈话页面对应的新Page对象。但与类别不同,解析谈话页面文本以获取项目名称并不是我可以建议你的官方方式,尽管它可能会帮助你在更一般的类别中对它进行分类。

答案 1 :(得分:0)

使用Wikipedia-API,您的代码可能如下所示:

import wikipediaapi
wiki = wikipediaapi.Wikipedia('en')
page = wiki.page('forensics')
print(page.categories)

希望它会有所帮助。