Здравствуйте форумчане. При написании парсера, возникла проблема такого характера, что поле которое мне нужно, имеет одинаковый вид с полями которые мне не нужны. Мне нужна только скорость, а скрипт парсит и разгон, и расход топлива. Как решить такую проблему? Код (Text): <?php include 'simple_html_dom.php'; $html = file_get_html('http://auto.yandex.ru/renault/megane/20110523/specs/20110523_20160774_20160770'); if(count($html->find('div.b-features__value'))) foreach($html->find('div.b-features__value') as $div) echo $div->innertext."<br>"; $html->clear(); // подчищаем за собой unset($html); ?>
Плохо знаю регулярные выражения, а лучше сказать почти не знаю, но вот такое сделал, думаю можно было лучше: Код (PHP): $str = '<p>some text</p> <div class="b-features__name">Максимальная скорость км в час</div> <div class="b-features__value">552</div> <p>some text</p>'; // узнаем где заканчивается '..Максимальная скорость</div>', это должно быть $data1[5][1] (номер позиции) preg_match('/(<div)+(.?)+(Максимальная скорость)+(.?)+(<\/div>)/i',$str,$data1,PREG_OFFSET_CAPTURE); // с конца '..Максимальная скорость</div>' начинаем поиск следующего тега div // он же должен быть со скоростью preg_match('/(<div)+(.*)+?(>)+(.*)+?(<\/div>)/i', $str, $data2,null,$data1[5][1]); echo "<h3>Скорость {$data2[0]}</h3>"; PS у меня работает или вот так покороче: Код (PHP): $str = '<p>some text</p> <div class="b-features__name">Максимальная скорость км в час</div> <div class="b-features__value">100</div> <p>some text</p>'; $r = '/(<div)+(.?)+(Максимальная скорость)+(.?)+(<\/div>)+(\s)+(<div)+(.?)+?(>)+(.*)+?(<\/div>)/i'; preg_match($r, $str, $data); echo $data[10];
Массивы индексировать можно, вы не знали? Код (Text): $values = $html->find('div.b-features__value'); $speed = $values[0]->innertext;