使用(cURL/jQuery/file_get_contents/请求/wget/more jQuery)获取文章的超文本标记语言文章代码,然后使用DOM解析器提取table. infobox tr[3]td
/使用正则表达式。
这实际上在大多数情况下是一个非常糟糕的主意。维基百科的超文本标记语言代码不是特别易于解析(尤其是信息框,它是一个手写模板系统),信息框的确切结构在不同的信息框之间发生变化,信息框的结构可能会随着时间的推移而改变。你也可能错过一些原本可用的功能,比如国际化。
乍一看,一些文章的wikitext看起来像是infobox的一个非常简单的表示:
{{ Infobox Foo
| param1 = bar
| param2 = 123
...
实际上,情况并非如此。模板是“递归的”,所以你可能会遇到参数1={{转换|10|km|mi}}
之类的东西;模板参数可能包含复杂的wikitext或超文本标记语言;维基文本文章中可能缺少一些参数,而模板从子页面或其他数据存储库中获取这些参数。如果一个参数包含有自己参数的其他模板,仅仅找出它的开始和结束位置可能不是一件简单的事情。
有各种项目以结构化形式提供维基百科信息框中包含的信息;两个大的是维基数据和DBpedia。
维基数据是一个构建包含结构化数据的知识库的项目;它由构建维基百科的同一全球运动维护,因此信息正在移动过程中。这是一个手动过程,因此并非维基百科中的所有信息都可以通过维基数据获得,另一方面,维基数据中有很多信息,但维基百科中没有。您可以通过文章页面左侧工具栏中的维基数据项链接找到文章的维基数据页面,查看其中包含哪些信息;从编程方式来看,您可以使用wbget实体API模块(沙盒,概念解释)访问维基数据信息,例如wikidata.org/w/api.php?action=wbgetentities
DBPedia是一个通过自动化手段获取维基百科信息框信息并以结构化形式发布的项目。您可以通过转到找到维基百科文章的DBPedia页面http://dbpedia.org/page/
如果您需要的信息不能通过维基数据或DBpedia获得,仍然有半结构化的方法从信息框中提取数据。对于基于超文本标记语言的提取,您可以使用维基百科的REST内容API(例如https://en.wikipedia.org/api/rest_v1/page/html/Albert_Einstein),它返回比普通文章页面使用的更丰富、更语义化的超文本标记语言,并在其中保留一些关于模板结构的信息。
或者,您可以从wikitext开始,使用更简单的客户端mwparserfromHell
Python模块(文档)或与Wikipedia REST内容服务交互的更强大的parsoid-jsapi将其解析为语法树。
一个试图从wikitext中提取infobox内容的高级Python库是wptools。
公认的答案在所有方面都是正确的,尤其是解析wikitexxt是可怕的潜台词。
然而,如果从维基数据获取数据对你来说不太合适,因为(只是假设)你是试图将数据从WP移动到WD的人,我相信你正在寻找的格式是parsetree。下面是它的样子:
<...lots of other stuff omitted>
<template lineStart= "1">
<title>Datatable TableRow</title>
<part>
<name>Picture </name>
<equals>=</equals>
<value> Picture 2013-07-26.jpg</value>
</part>
<part>
<name>Inscription </name>
<equals>=</equals>
<value> This is an Inscription on visible on the image</value>
</part>
<part>
<name>NS </name>
<equals>=</equals>
<value> 54.0902049</value>
</part>
<part>
<name>EW </name>
<equals>=</equals>
<value> 12.1364164</value>
</part>
<part>
<name>Region </name>
<equals>=</equals>
<value> DE-MV</value>
</part>
<part>
<name>Name </name>
<equals>=</equals>
<value> Person, Anna</value>
</part>
<part>
<name>Location </name>
<equals>=</equals>
<value> Lange Stra\u00dfe&nbsp;14<br /><small>ex: Lange Stra\u00dfe&nbsp;89</small></value>
</part>
<part>
<name>Date </name>
<equals>=</equals>
<value> </value>
</part>
</template>
这是MediawikiAPISandbox对此类请求的URI。请注意包含parsetree的属性列表。我已经包含了一些其他类别(包括类别)以防万一,您可能希望将列表修剪为您实际需要的内容,以节省您的时间和其他人的服务器。