Vla*_*nko 7 parsing mediawiki wikipedia wikipedia-api mediawiki-api
是否有可能获得所有维基百科国家、地区和城市之间存在关系的列表?我找不到适合此任务的任何 API。解析我需要的所有信息的最简单方法是什么?PS:我知道,我可以从其他数据源获取此信息。但是我对维基百科很感兴趣...
[2020 更新] 现在最好使用 Wikidata 查询服务来完成,您可以使用一些SPARQL运行超级特定的查询,例如:查找所有国家及其标签。查看维基数据查询帮助
获取整个图形可能有点乏味,但您可以从实验性/非官方Wikidata Query API获取大部分数据。
我建议以下工作流程:
转到您想与之合作的实体类型的实例,例如爱沙尼亚 (Q191)并查找其(P31) 属性的实例,您会发现:国家、主权国家、联合国成员、欧盟成员、等等。
使用 Wikidata Query API claim命令输出每个实体作为选择的 P31 属性。让我们试试国家(Q6256):
http://wdq.wmflabs.org/api?q=claim[31:6256]
它输出一组数字 ID:那是您的国家/地区!(请注意,结果仍然不完整,因为只找到了 141 个项目:维基数据中缺少国家/地区,或者,如 Nemo 在评论中所建议的,某些国家/地区将在国家 (Q6256) 子类 (P279) 中找到)
不过,您可能想要的不仅仅是 id,因此您可以向Wikidata 官方 API询问实体数据:
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q16&format=json&props=labels|claims&languages=en|fr
(这里加拿大(Q16)数据,json格式,只有索赔和标签数据,英文和法文。查看文档以根据您的需要调整参数)
一次可以查询多个实体,限制为50个,如下:
https://www.wikidata.org/w/api.php?action=wbgetentities&ids=Q16|Q17|Q20|Q27|Q28|Q29|Q30|Q31|Q32|Q33|Q34|Q35|Q36|Q37|Q38|Q39|Q40|Q41|Q43|Q45|Q77|Q79|Q96|Q114&format=json&props=labels|claims&languages=en|fr
Run Code Online (Sandbox Code Playgroud)
从每个国家/地区的数据中,您可以查找注册为行政分区(P150) 的实体,并在这些新实体上重复。
或者,您可以使用tree命令获取所有行政分区树。例如,对于法国(Q142),那将是http://wdq.wmflabs.org/api?q=tree[142][150]Tadaaa,36994 项!但考虑到从一个国家到另一个国家可能遇到的不同类型的细分,这更难完善。并避免从浏览器执行此类查询,它可能会崩溃。
您现在只需要通过使用claim命令和自治市(Q15284) 实体的适当子类(P279) (所有可用的here)来细化最后一个查询,按国家/地区查找城市:对于法国,那是公社(Q484170),所以你的请求看起来像
http://wdq.wmflabs.org/api?q=tree[142][150] AND claim[31:484170]
然后对所有国家重复一遍:玩得开心!
就我个人而言,我会从 Wikidata 开始,因为它直接使用 MediaWiki,具有相同的 API,因此您可以使用类似的代码。我会使用pywikibot来开始。就像这样,您仍然可以从维基百科请求有意义的页面(例如列表页面或类别)。
以下是访问维基数据的方法的精彩概述