我使用'从维基百科生成随机页面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
有没有一种简单的方法来区分这些情况?
使用API判断页面是否消除歧义。例如,这将在文章名称空间中检索10个随机标题(在沙箱中交互尝试)。消歧页面的属性中将包含"pageprops":{"disambiguation":""}
。不幸的是,列表没有这么简单的方法,你必须从它们的标题(/^List of .*/
)或类别中猜测。
列表页面(大多数情况下)可以通过查询WikiData来区分P31(的实例)的值。列表页面的值为Q13406463(维基媒体列表页面)。
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q678323
如果您使用这种方法,您可以同时检查消歧页面。这些将具有值Q4167410(维基媒体消歧页面)。
有许多Python库用于与MediaWiki API交互,例如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()