web-dev-qa-db-ja.com

Mediawiki APIによってWikipediaの記事からInfoboxを取得する方法は?

ウィキペディアの記事には、Infoboxテンプレートが含まれている場合があります。次の呼び出しにより、Infoboxを含む記事の最初のセクションを取得できます。

http://en.wikipedia.org/w/api.php?action=parse&pageid=568801&section=0&prop=wikitext

必要なのは、Infoboxデータのみを返すクエリです。これは可能ですか?

30
Erdem

これは、次のようにWikipedia APIへのURL呼び出しで実行できます。

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=xmlfm&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0

titles=セクションとページタイトル、およびformat=xmlfmからformat=json json形式の記事が必要な場合。

28
Gaʀʀʏ

非常に複雑な情報ボックスを自分で解析する代わりに、データベースオブジェクトとしてWikipediaの情報ボックスが抽出された DBPedia を見てください。

13
jpatokal

@garryの答えに基づいて、次のようにrvparseパラメータを介して、ウィキペディアに情報ボックスをhtmlに解析させることができます。

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=Scary%20Monsters%20and%20Nice%20Sprites&rvsection=0&rvparse

どちらのメソッドもjust情報ボックスを返さないことに注意してください。ただし、htmlコンテンツから、tableをクラスinfoboxで(beautifulsoupなどを介して)抽出できます。

Pythonでは、次のようなことをします

resp = requests.get(url).json()
page_one = next(iter(resp['query']['pages'].values()))
revisions = page_one.get('revisions', [])
html = next(iter(revisions[0].values()))
# now parse the html 
2
reubano

ページに右側の情報ボックスがある場合は、このURLを使用してテキスト形式で取得します。私の例では、要素Hydrogenを使用しています。あなたがする必要があるすべてはあなたのタイトルで「水素」を取り替えることです。

https://en.wikipedia.org/w/index.php?action=raw&title=Template:Infobox%20hydrogen

JSON形式を探している場合は、このURLを使用してください。

https://en.wikipedia.org/w/api.php?action=parse&page=Template:Infobox%20hydrogen&format=json

2