问题描述
我正在使用 Wikipedia-API 0.5.4,我想检索给定页面上正在讨论的项目的 item ID。是否可以使用从页面查询返回的数据来执行此操作?
我能够检索 pageid。但是,关于同一项目的不同语言的页面没有相同的 pageid,但它们确实引用了单个项目的唯一项目 ID。
在下面的例子中,歌手雪儿的英文页面的pageid与对应的法语页面的pageid不同,而“Cher”的item ID在两种情况下应该是相同的。
是否无法从页面对象访问项目 ID?
import wikipediaapi as wp
wp_en = wp.Wikipedia('en')
cher_en = wp_en.page('Cher')
print(cher_en.pageid)
> 80696
print(cher_en.langlinks['fr'].pageid)
> 339022
解决方法
我最终使用 requests 库直接使用 Wikipedia REST API。包含 prop=pageprops
将返回项目 ID,该 ID 在不同语言之间共享。
import requests as rq
request_str = 'https://en.wikipedia.org/w/api.php?action=query&prop=pageprops&titles=Cher&format=json'
resp = rq.get(request_str)
resp.text.split('wikibase_item":"')[1].split('"')[0]
> 'Q12003'
fr_str = 'https://fr.wikipedia.org/w/api.php?action=query&prop=pageprops&titles=Cher_(artiste)&format=json'
fr_resp = rq.get(request_str)
fr_resp.text.split('wikibase_item":"')[1].split('"')[0]
> 'Q12003'