1

特定の Wikipedia ページ、主に国から Infobox の情報を抽出したいと考えています。具体的には、可能であればPython+または他の言語 + ライブラリを使用してページをスクレイピングせずにこれを実現したいと考えています。BeautifulSoup4ウィキペディアのサブドメインごとに CSS タグが異なることに気付いたので (他の言語と同様)、公式 API を使用したいと思います。

ウィキペディアの記事から Mediawiki API で Infobox を取得するには? 次の方法を使用すると機能すると述べていますが、これは実際に特定のタイトル ( ) に当てはまりますScary Monsters and Nice Spritesが、残念ながら、私が試したページでは機能しません (さらに下)。

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

ただし、上記Wikimediainfoboxクエリを実行すると、コンテンツは取得されますが、infobox. たとえば、(European_Union) に対してクエリを実行すると、Europäische_Union(特に) 次のスニペットの結果が得られます

{{Infobox Europäische Union}}
<!--{{Infobox Staat}} <- Vorlagen-Parameter liegen in [[Spezial:Permanenter Link/108232313]] -->

ただし、英語版のウィキペディアでは問題なく機能します。

したがって、インフォボックスを抽出したいページは次のようになります。http://de.wikipedia.org/wiki/Europäische_Union

そして、これは私が使用しているコードです:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")

import lxml.etree
import urllib

title = "Europäische_Union"

params = { "format":"xml", "action":"query", "prop":"revisions", "rvprop":"content", "rvsection":0 }
params["titles"] = "API|%s" % urllib.quote(title.encode("utf8"))
qs = "&".join("%s=%s" % (k, v)  for k, v in params.items())
url = "http://de.wikipedia.org/w/api.php?%s" % qs
tree = lxml.etree.parse(urllib.urlopen(url))
revs = tree.xpath('//rev')

print revs[-1].text

非常に重要な何かが欠けていますか?

4

1 に答える 1

0

データはウィキペディアから取得するのではなく、ウィキペディアの構造化データに対応するウィキデータから取得する必要があります。(また、これは標準のインフォボックスではありません。パラメータはなく、テンプレート自体に入力されます。)

ウィキデータAPI モジュールwbgetclaimsを使用して、欧州連合に関するすべてのデータを取得します。

https://www.wikidata.org/w/api.php?action=wbgetclaims&entity=Q458

もっときれいですね。詳細については、 https://www.wikidata.org/wiki/Wikidata:Data_accessを参照してください。

于 2015-07-28T09:54:11.103 に答える