【问题标题】:How to remove links inside a specific class container (php scrape)?如何删除特定类容器内的链接(php scrape)?
【发布时间】:2011-03-11 00:34:34
【问题描述】:

我正在使用 php 来抓取页面。如何从具有特定类的 div 中删除链接,同时保持名称显示?

例如

<p>Our list of teachers:</p>
<div class="teacher"><a href="...">John Brown</a></div>
<div class="teacher"><a href="...">Peter Smith</a></div>
<div class="teacher"><a href="...">Jane Doe</a></div>

感谢您的帮助, 杰夫

【问题讨论】:

    标签: php web-scraping


    【解决方案1】:

    DOMDocument(用于解析)和DOMXPath(用于选择)将让您轻松获取该文本。

    【讨论】:

      【解决方案2】:

      使用PHPQuery,一种以类似 JQuery 的方式操作 DOM 的方法。

      【讨论】:

        【解决方案3】:

        phpQuery 或QueryPath 大大简化了这一点。但是用一个实际的例子来提供答案:

        $dom = qp($html);  // or $url
        foreach ($dom->find("div.teacher a") as $a) {
            $a->replaceWith( $a->text() );
        }
        $html = $dom->writeHTML();
        

        【讨论】:

        • 谢谢,这看起来很棒。我不熟悉 phpQuery - 使用它涉及什么?它仅仅是一个图书馆的链接吗?
        • 是的,它是一个围绕 DOMDocument 的库包装器(它本身使用起来有点麻烦)。 phpQuery 有更好的文档,但是 QueryPath 允许只写 qp($html) 这就是我更喜欢它的原因。您需要下载和 include() 以使用紧凑函数调用。
        • 谢谢马里奥,很抱歉迟到的答案,(但我不得不搁置一段时间。)这实际上是现有脚本的一部分 - 是否可以不使用 phpQuery 或 QueryPath库 - 即,在普通 php 中?
        • 你将不得不使用原始的 DOMDocument API。无论如何,在这种情况下,这只是稍微多一点的编码工作。
        猜你喜欢
        • 1970-01-01
        • 2011-04-19
        • 1970-01-01
        • 1970-01-01
        • 2021-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-14
        相关资源
        最近更新 更多