如何获得复杂的维基百科模板的结果?

时间:2012-01-19 21:56:01

标签: php parsing mediawiki wikipedia

这个问题有点难以理解,但我会尽力解释。首先,让我提供一个示例页面:

http://en.wikipedia.org/wiki/African_bush_elephant

这是一个维基百科页面,特别是一个特殊页面,因为它右边有'taxobox'。我正在尝试使用PHP解析该taxobox中的属性。维基百科有两种方法可以创建这样的taxobox:手动或使用特殊的“auto taxobox”模板。

我可以解析手册。我使用维基百科的API以json格式返回页面内容,接下来我使用一些正则表达式来获取这些属性。

如果是自动taxobox,返回的内容如下:

> {{automatic taxobox | name = African Bush Elephant<ref
> name=MSW3>{{MSW3 Proboscidea | id = 11500009 | page =
> 91}}</ref> | status = VU | status_system = iucn3.1 | status_ref
> = <ref name=IUCN>{{IUCN2010|assessors=Blanc, J.|year=2008|version=2010.1|id=12392|title=Loxodonta
> africana|downloaded=04 April 2010}}</ref> | trend = unknown |
> image = African Bush Elephant.jpg | taxon = Loxodonta africana |
> synonyms = ''Loxodonta africana africana'' | binomial = ''Loxodonta
> africana'' | binomial_authority = ([[Johann Friedrich
> Blumenbach|Blumenbach]], 1797) }}

如果您将其与实际页面进行比较,就像您在维基百科上看到的那样,您会发现缺少几个属性。例如,属性“Kingdom”在真实页面上可见,但不在此处返回。还有更多属性缺失。

这就像是模板需要维基百科的服务器端命令才能将模板转换为实际输出。我了解到API有一个“expandtemplates”动作,您可以发送一个类似上面的代码片段,然后您将看到用户看到的结果。我正在将它用于几个模板并且它可以工作,但遗憾的是不适用于自动taxobox模板。单击此链接可查看expandtemplates返回的内容:

complete link

如您所见,模板实际上并未扩展。相反,它显示更多模板,嵌套和重复几次。

所以现在我不得不尝试从具有auto taxobox模板的页面中读取这些属性。我能想到的另一个方向是不使用API​​并只解析实际页面的html。对于某些属性来说这是可行的,但是其他属性非常脆弱。

2 个答案:

答案 0 :(得分:3)

使用action=parse代替action=expandtemplates。正如您所注意到的,expandtemplates只扩展了一个级别;另外,它不会完全预处理输入(例如,它不能成功处理模板中的某些变量引用)。

答案 1 :(得分:2)

不要重新发明轮子,请查看DBPedia,它已经从维基百科模板中提取了所有可能的内容,并以各种易于解析的格式公开。

相关问题