2014-02-08 76 views
2

我正在尝试为“KFC”等页面提取母公司信息(在信息框窗格中)。Wikipedia API - 从信息框中获取完整信息

如果您访问

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

网址...的信息框包含属性(父=百胜)

.. howver,当我通过访问PHP API ..不包括父级信息。

http://en.wikipedia.org/w/api.php?action=query&prop=revisions&rvprop=content&format=json&titles=KFC&rvsection=0

我如何保证维基API返回的“父=”信息,以及(对于一个品牌长期像“肯德基”)。基本上,我想通过维基百科API来提取Yum Brands是肯德基的母公司的信息。

谢谢!

回答

4

看看wikipedia wiki官方获取信息的方式。

我的建议是使用屏幕抓取PHP Simple HTML DOM Parser这将始终是最好的,即使它已被弃用。唯一的缺点是,如果维基百科改变它的样子,你将不得不更新你的代码。

A guide to PHP Simple HTML DOM Parser。

编辑:

至少我做的,而不是链接到非工作资源和downvoting正确答案的东西...

这是我做来从信息框窗格中的母公司信息的代码与PHP简单的HTML DOM分析器。

<?php 

//The folder where you uploaded simple_html_dom.php 
require_once('/homepages/../htdocs/simple_html_dom.php'); 

//Wikipedia page to parse 
$html = file_get_html('http://en.wikipedia.org/wiki/KFC'); 


foreach ($html->find ('tr th a[title=Holding company]') as $element) { 
    $element = $element->parent; 
    $element = $element->parent; 

    $tabella = $element->find ('td', 0); 

    //Now $parent contains "Yum! Brands" 
    $parent = $tabella->plaintext; 

    echo $parent; 

} 

?> 

如果这个答案满足您的需求,请选择它作为最佳答案,并给予好评,因为我花了很大的力气,约1小时=/

感谢;)

+0

ChicagoDude已经在使用MediaWiki API--建议他阅读维基百科的文档,指导他使用这个API没有用,更不用说解决方案了。 – duskwuff

+0

我正在指导他使用DOM解析器,这似乎是唯一的解决方案 –

+0

感谢贾科莫 - 这真的有帮助! – ChicagoDude

0

的线包含该信息的文本不在文章中!它只出现在您正在查看的文章中调用的{{Infobox KFC}}模板中。

一般来说,维基百科文章的源代码只是偶然构成的 - 文章的源代码主要是指在页面上生成所需输出结束的手段。如果您尝试从维基百科中提取结构化数据,则可能对DBPedia项目收集的数据感兴趣。

+1

DBPedia的JSON Web服务现在已经关闭,并且是我几个月前检查过的最后一次。我不知道是否有PHP的SPARQL库,所以至少现在废除原始页面源代码似乎是实现ChicagoDude所需的最佳选择 – Vishal