将(嵌套的)HTML无序链接列表转换为PHP链接数组

时间:2010-04-11 15:14:28

标签: php html screen-scraping

我有一个常规的,嵌套的HTML无序链接列表,我想用PHP抓它并将其转换为数组。

原始列表如下所示:

<ul>
<li><a href="http://someurl.com">First item</a>
    <ul>
    <li><a href="http://someotherurl.com/">Child of First Item</a></li>
    <li><a href="http://someotherurl.com/">Second Child of First Item</a></li>
    </ul>
</li>
<li><a href="http://bogusurl.com">Second item</a></li>
<li><a href="http://bogusurl.com">Third item</a></li>
<li><a href="http://bogusurl.com">Fourth item</a></li>
</ul>

任何物品都可以有孩子。

(实际的屏幕抓取不是问题,我可以这样做。)

我想把它变成一个只包含链接的PHP数组,同时保持列表的层次性。有什么想法吗?

我看过使用htmlsimpledom和phpQuery,它们都使用类似jQuery的语法。但是,我似乎无法正确使用语法。我可以获得所有链接,但最终我失去了分层性质和顺序。

感谢。

1 个答案:

答案 0 :(得分:0)

沿着以下行使用DOMDocument和SimpleXMLElement:

$doc = new DOMDocument();
$doc->loadHTML($html);
$xmlStr = $doc->saveXml($doc->documentElement);

$xml = new SimpleXmlElement($xmlStr);

$links = array();

foreach ($xml->xpath('//a') as $li) {
    $links[] = $li->attributes()->href;
}

如果将href作为SimpleXMLElement添加到$ links,请使用ob_start和ob_clean来捕获字符串。

Cheat sheet for xpath queries(pdf)