【问题标题】:Convert a (nested)HTML unordered list of links to PHP array of links将(嵌套的)HTML 无序列表链接转换为 PHP 链接数组
【发布时间】:2010-04-11 15:14:27
【问题描述】:

我有一个常规的、嵌套的 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 的语法。但是,我似乎无法正确使用语法。我可以得到所有的链接,但我最终失去了层次结构和秩序。

谢谢。

【问题讨论】:

    标签: php html screen-scraping


    【解决方案1】:

    按照以下方式使用 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)

    【讨论】:

    • 谢谢,这得到了所有的链接,但它失去了嵌套!
    • 会有一种使用 SimpleXmlElement 的方法,但我无法回答。尝试查看该类的 PHP 手册。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-03-30
    相关资源
    最近更新 更多