区分Wiki中的文章页面和列表/消除歧义页面

时间:2014-04-22 20:45:18

标签: python wikipedia

我使用'https://en.wikipedia.org/wiki/Special:Random'从维基百科生成随机页面并使用BeautifulSoup阅读它们。问题是我只想要文章页面:

http://en.wikipedia.org/wiki/Ada_County,_Idaho

但有时它是列表页面或消歧页面(我不想要)。例如:http://en.wikipedia.org/wiki/List_of_U.S._counties_named_after_personal_first_names

有没有一种简单的方法可以区分这些情况?

2 个答案:

答案 0 :(得分:2)

使用the API来判断页面是否消除歧义。例如。 this将在文章命名空间(try interactively in sandbox)中检索10个随机标题。消歧页面的属性中将包含"pageprops":{"disambiguation":""}。不幸的是,列表没有这么简单的方法,你必须从他们的标题(/^List of .*/)或类别中猜测。

答案 1 :(得分:1)

列表页面可以(大多数时候)通过查询WikiData获取P31(instance of)的值来区分。 List pages将具有值Q13406463(维基词典列表页面)。

https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q678323

如果您使用此方法,则可以同时检查消歧页面。这些will have值Q4167410(Wikimedia disambiguation page)。

有许多用于与MediaWiki API交互的Python库,例如: wikitools

listOfTitles = 'Ada_County,_Idaho|List_of_U.S._counties_named_after_personal_first_names'

site = wikitools.Wiki("http://www.wikidata.org/w/api.php", user, password)
site.login(user,password)

params = {'action':'wbgetentities', 'props':'claims','titles':listOfTitles,'format':'json'}
request = wikitools.APIRequest(site, params)
result = request.query()