У меня есть следующая таблица: http://www.nbs.rs/kursnaListaModul/srednjiKurs.faces?lang=lat
Это список обмена валюты, и мне нужно извлечь некоторые данные из него. На левой стороне таблицы указаны идентификационные номера валюты. Можно ли извлекать данные из указанных строк на основе их идентификаторов?
Например, из приведенной выше таблицы я хочу извлечь валюты с идентификаторами 978, 203 и 348.
Выход должен быть:
Изучив подобные примеры, я придумал следующее: http://pastebin.com/hFZs1H7C
Мне нужно как-то обнаружить идентификаторы и правильные значения печати … Я ноб, когда дело доходит до программирования, и мне нужна ваша помощь.
<?php $data = file_get_contents('http://www.nbs.rs/kursnaListaModul/srednjiKurs.faces?lang=lat'); $dom = new domDocument; @$dom->loadHTML($data); $dom->preserveWhiteSpace = false; $tables = $dom->getElementsByTagName('table'); $rows = $tables->item(1)->getElementsByTagName('tr'); foreach ($rows as $row) { $cols = $row->getElementsByTagName('td'); foreach ($cols as $col) { echo $col; } } ?>
Сбор данных таблицы как массива для последующего использования:
$dom = new DomDocument; $dom->loadHtmlFile('http://www.nbs.rs/kursnaListaModul/srednjiKurs.faces?lang=lat'); $xpath = new DomXPath($dom); // collect header names $headerNames = array(); foreach ($xpath->query('//table[@id="index:srednjiKursLista"]//th') as $node) { $headerNames[] = $node->nodeValue; } // collect data $data = array(); foreach ($xpath->query('//tbody[@id="index:srednjiKursLista:tbody_element"]/tr') as $node) { $rowData = array(); foreach ($xpath->query('td', $node) as $cell) { $rowData[] = $cell->nodeValue; } $data[] = array_combine($headerNames, $rowData); } print_r($data);
Выход :
Array ( [0] => Array ( [ŠIFRA VALUTE] => 978 [NAZIV ZEMLJE] => EMU [OZNAKA VALUTE] => EUR [VAŽI ZA] => 1 [SREDNJI KURS] => 104,2182 ) ... )
Пример использования:
foreach ($data as $entry) { printf( '%s %s' . PHP_EOL, $entry['OZNAKA VALUTE'], $entry['SREDNJI KURS'] ); }
Вы можете использовать функции xpath и domdocument PHP для извлечения определенных данных из html (или xml.)
$src = new DOMDocument('1.0', 'utf-8'); $src->formatOutput = true; $src->preserveWhiteSpace = false; $content = file_get_contents("http://www.nbs.rs/kursnaListaModul/srednjiKurs.faces?lang=lat"); @$src->loadHTML($content); $xpath = new DOMXPath($src); $values=$xpath->query('//td[ contains (@class, "tableCell") ]'); foreach($values as $value) { echo $value->nodeValue."<br />"; }
это будет печатать innerHTML каждого элемента td с классом = «tableCell».