Нужна помощь в очистке веб-страницы - получение определенного контента ... - PullRequest
0 голосов
/ 28 июля 2011

У меня есть таблица, количество столбцов которой может меняться в зависимости от конфигурации удаленной страницы (я не контролирую ее). Я хочу получить только информацию из определенного столбца, обозначенного заголовком столбца.

Вот упрощенная таблица:

<table>
<tbody>
<tr class='header'>
    <td>Image</td>
    <td>Name</td>
    <td>Time</td>
</tr>
<tr>
    <td><img src='someimage.png' /></td>
    <td>Name 1</td>
    <td>13:02</td>
</tr>
<tr>
    <td><img src='someimage.png' /></td>
    <td>Name 2</td>
    <td>13:43</td>
</tr>
<tr>
    <td><img src='someimage.png' /></td>
    <td>Name 3</td>
    <td>14:53</td>
</tr>
</tbody>
</table>

Я хочу извлечь только имена (столбец 2) таблицы. Однако, как указывалось ранее, порядок столбцов не может быть известен. Например, столбец Image может отсутствовать, и в этом случае нужный мне столбец будет первым.

Мне было интересно, есть ли способ сделать это с DomDocument / DomXPath. Возможно, найдите строку «Имя» в первом tr и выясните, к какому индексу столбца это относится, а затем используйте ее для получения информации. Менее элегантным решением было бы посмотреть, есть ли в первом столбце тег img, и в этом случае столбец изображения будет первым, и поэтому мы можем бросить этот путь и использовать следующий.

Занимался этим около полутора часов, но я не знаком с функциями и манипуляциями с DomDocument. У меня много проблем с этим.

1 Ответ

0 голосов
/ 28 июля 2011

Простой HTML DOM Parser может быть полезен. Вы можете проверить руководство. В основном вы должны использовать что-то вроде;

$url = "file url";
$html = file_get_html($url);
$header = $html->find('tr.header td');
$i = 0;
foreach ($header as $element){
 if ($element->innerText == 'Image') { $num = $i; }
 $i++;
}

Мы нашли, какой столбец ($ num) является столбцом изображения. Вы можете добавить дополнительные коды для улучшения.

PS: простой способ найти все источники изображения;

$images = $html->find('tr td img');
foreach ($images as $image){
 $imageUrl[] = $image->src;
}
...