Я создаю базовый скребок для экрана для личного использования и в учебных целях, поэтому, пожалуйста, не оставляйте комментарии типа «Вам нужно разрешение» и т. Д.
Данные, к которым я пытаюсь получить доступ, структурированы следующим образом:
<tr>
<td>
<div class="wrapper">
<div class="randomDiv">
<div class="divContent">
<div class="event">asd</div>
<div class="date">asd</div>
<div class="venue">asd</div>
<div class="state">asd</div>
</div>
</div>
</div>
</td>
</tr>
Я пытаюсь собрать все эти данные (поскольку на данной странице около 20 строк).
Используя следующий код, мне удалось собрать нужные мне данные:
$remote = file_get_contents("linktoURL");
$doc = new DOMDocument();
$doc->preserveWhiteSpace = false;
$file = @$doc->loadHTML($remote);
$rows = $doc->getElementsByTagName('tr');
$xp = new DOMXpath($doc);
//initialize variables
$rows = array();
foreach($xp->query('//*[contains(@class, \'wrapper\')]', $doc) as $found) {
echo "<pre>";
print_r($found->nodeValue);
}
Теперь мой вопрос: как мне сохранить все эти данные в ассоциативном массиве, как показано ниже:
Array (
[0] => Array
(
[Event] => Name
[Date] => 12/12/12
[Venue] => NameOfPlace
[state] => state
)
[1] => Array
(
[Event] => Name
[Date] => 12/12/12
[Venue] => NameOfPlace
[state] => state
)
[2] => Array
(
[Event] => Name
[Date] => 12/12/12
[Venue] => NameOfPlace
[state] => state
)
)
Сейчас единственное решение, которое приходит на ум, - это вызвать запрос xpath для каждого имени класса //*[contains(@class, \'className\')]
в цикле foreach.
Есть ли более идиоматический способ через DOMDocument и XPath, в котором я могу создать ассоциативный массив вышеуказанных данных?
редактирование:
Я не ограничен использованием DOMDocument и XPath, если есть другие решения, которые могут быть проще, пожалуйста, опубликуйте их.