【问题标题】:How to parse the attributes value inside {{}} (curly braces) inside a infobox如何解析信息框内 {{}}(大括号)内的属性值
【发布时间】:2012-04-14 01:00:49
【问题描述】:

在维基百科的信息框中,一些属性值也在花括号 {{}} 内。有时它们也有 lins。我需要大括号内的值,这些值显示在维基百科网页上。 我读了这些也是模板。。谁能给我一些链接或指导我如何处理它?

【问题讨论】:

  • 我同意 ShoeMaker 的观点:您能向我们解释一下您到底想要什么吗?因为有多种方法可以“处理”它,这取决于它。
  • 嗯,我需要提取电影、书籍和电视节目的信息框。就像假设有一个国家,我只需要国家值“英国”或美国
  • 我知道有 dbpedia 但我已经用过了。现在我编写一个脚本,如果找不到该值,那么它将查看维基百科页面

标签: mediawiki wikipedia wikipedia-api


【解决方案1】:

双花括号{{}} 定义了对某种魔术字、变量、解析器函数或模板的调用。可以在MediaWiki.org/.../Manual:Magic_words 上找到帮助。看起来像| 的小行称为pipes,用作分隔符,允许wikicore 解析引擎定义可与魔术词、变量、解析器函数或模板一起使用的参数。..

【讨论】:

    【解决方案2】:

    希望这将帮助遇到同样问题的每个人。 考虑到您将使用 PHP 解析信息框,您可以使用以下命令: http://www.mywiki.com/wiki/api.php?format=xml&action=query&titles=PAGE_TITLE_THAT_CONTAINS_AN_INFOBOX&prop=revisions&rvprop=content&rvgeneratexml=1

    'rvgeneratexml' 被设置为 true (1),这将使 xml 节点<rev> 生成一个包含 XML 格式的信息框信息的属性“parsetree”。

    然后,在 PHP 中,您可以使用 simpleXML 加载整个信息(<api>everything,包括 <rev></api>):

    $xml = simplexml_load_file($url);
    

    然后您可以通过获取“parsetree”属性并加载字符串来加载模板的信息:

    $template = simplexml_load_string($xml->query->pages->page->revisions->rev->attributes()->parsetree);
    $template = $template->template; // If more than 1 template, check template[0], [1], etc
    

    然后,通过使用正确的结构,您可以通过以下方式访问元素:

    if ($template->part[0]->name='name')
        $film = $template->part[0]->value;
    

    然后,$film 将包含影片的名称(->name 是参数的名称,->value 是它的值)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      • 2016-09-17
      • 2018-11-16
      • 2015-09-06
      • 2019-08-06
      • 2021-03-27
      相关资源
      最近更新 更多