Как получить все между двумя тегами, если закрывающий тег появляется в родительском? - PullRequest
0 голосов
/ 21 января 2012

В этом проблема: используемый мной скрипт перестает смотреть на первый тег.

Я пишу сценарий на веб-сайте, и это часть сайта, которую я хочу «извлечь».

<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>

Я хочу отобразить все эти «раздражающие» (потому что они портят функцию скрипта, присутствуя там) на моем сайте, но как мне это сделать?

Это мойтекущий подход: получить позицию первого тега, получить позицию закрывающего тега и вычесть эту часть из всей строки, содержащей весь исходный сайт.

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

Проблема в том, что я хочу, чтобыостанавливаться на закрывающем теге основного div, а не на первом найденном закрывающем теге.

Ответы [ 3 ]

0 голосов
/ 21 января 2012

Вы хотите показать действительный код? Если это так, поместите свой код в теги pre.

<code><pre>

Все внутри будет переформатировано и все теги / код будут видны.

0 голосов
/ 21 января 2012

Используйте (или ) для простоты. Затем вы можете извлечь содержимое <div> по классу или идентификатору наиболее просто:

 print htmlqp($page)->find("div.i-want-this-div")->html();
0 голосов
/ 21 января 2012

Используйте DOMDocument для подобных вещей.

...