HTML Parser для получения контента между элементами - PullRequest
2 голосов
/ 12 марта 2010

Я пытаюсь проанализировать данные примерно на 100 страницах, каждая из которых содержит строку HTML:

<span class="cell CellFullWidth"><span class="SectionHeader">EVENT</span><br/><div class="Center">Event Name</div></span>

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

Я заглянул в Simple HTML DOM, но никак не мог понять. Пожалуйста, помогите, спасибо!

Ответы [ 3 ]

3 голосов
/ 12 марта 2010

Предполагая, что:

  • Все имена событий в div
  • Содержащий div должен иметь класс "Центр"
  • Все div с классом "Центр" содержат название события

Вот так:

<?php

$content = '
<span class="cell CellFullWidth"><span class="SectionHeader">EVENT</span><br/><div class="Center">Event Name1</div></span>
<span class="cell CellFullWidth"><span class="SectionHeader">EVENT</span><br/><div class="Center">Event Name2</div></span>

';

$html = new DOMDocument();

$html->loadHTML($content);

$divs = $html->getElementsByTagName('div');

foreach($divs as $div) {
    if($div->getAttribute('class') == 'Center') {
        $events[] = $div->nodeValue;
    }
}

print_r($events);
1 голос
/ 12 марта 2010

Если весь текст, кроме имени события, всегда один и тот же, вы можете сделать это только с помощью подстроки (поскольку начальный и конечный биты всегда будут одинаковой длины)

$event_name = substr($current_line, 98, -14);

Это даст вам то, что осталось, когда вы удалите первые 98 символов и последние 14.

0 голосов
/ 12 марта 2010

Вы можете использовать PHP-функции манипулирования DOM .

Обычно вы создаете новый DOMDocument с помощью DOMDocument :: loadHTML () или DOMDocument :: loadHTMLFile (), а затем используете $ yourDOmObject-> getElementsByTagName () , чтобы получить все элементы <span>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...