如果结束标记出现在父标记中,如何获取两个标记之间的所有内容?

时间:2012-01-20 22:15:48

标签: php screen-scraping

这是问题:我使用的脚本停止查看第一个标记。

我正在浏览一个网站,这是我想要提取的网站的一部分。

<div class="i-want-this-div">
    <div class="annoying-sub-div">
        Bla bla bla  
    </div>
    <div class="annoying-sub-div">
        etc...
    </div>
    <div class="annoying-sub-div">
    </div>
    <div class="annoying-sub-div">
    </div>
    <div class="annoying-sub-div">
    </div>
</div>

我想在我的网站上显示所有那些令人讨厌的(因为它们在那里搞乱了脚本的功能)div,但是我该怎么做?

这是我当前的方法:获取第一个标记的位置,获取结束标记的位置,并从包含整个网站源的整个字符串中减去该部分。

$startPos     = strpos($siteIAmScreaping, '<div class="i-want-this-div">');
$endPos       = strpos($siteIAmScreaping, '</div>', $startPos) + 8;
$annoyingDivs = substr($siteIAmScreaping, $startPos, $endPos-$startPos);

问题是:我希望它停在主divs结束标记上而不是它找到的第一个结束标记上。

3 个答案:

答案 0 :(得分:0)

使用DOMDocument这样的内容。

答案 1 :(得分:-1)

您是否想要显示实际代码?如果是这样,请将代码放在预标记内。

<pre></pre>  

其中的所有内容都将重新格式化,并且所有标签/代码都将可见。

答案 2 :(得分:-1)

为简单起见,请使用(或)。然后,您可以最轻松地按类或ID提取<div>内容:

 print htmlqp($page)->find("div.i-want-this-div")->html();