Приветствую. Использую Simple HTML DOM для парсинга товаров интернет-магазина. Параметр "вес товара" лежит в этом куске:
<div id="AddnInfo">
<p>
<p><label>“R”Web#:</label> <span class="value">399014</span></p>
<p><label>SKU:</label> <span class="value">0279D033</span></p>
<p><label>Manufacturer #:</label> B5529</p>
<p><label>Product Weight:</label>1.5 pounds</p>
<p><label>Product Dimensions (in inches):</label>8.5 x 7.9 x 2.3</p>
</p>
</div>
Причём, как до нужной цифры, так и после неё может быть совершенно любое количество < p > ... < / p >, т. е. её место в вышеуказанном списке непостоянно.
Вопрос - по какому принципу можно выдернуть из этого кода Product Weight?
Вас следует найти исходный родительской блок #AddnInfo
и список всех дочерних элементов label
. Далее сравнить содержимое текста этих меток на предмет соответствия Product weight:
. Для найденной нужной метки взять родительский элемент и получить его текстовый контент:
define("PRODUCT_WEIGHT", 'Product Weight:');
$html = str_get_html($txt);
$labels = $html->find("#AddnInfo label");
foreach($labels as $l){
if($l->innertext === PRODUCT_WEIGHT){
$weight = (string)$l->parent()->find('text', 1)
break;
}
}
print_r([$weight, html_entity_decode($weight)]);
$weight
будет содержать значение 1.5 pounds
. С помощью html_entity_decode
можно преобразовать  
, но преобразуется оно не в обычный ASCII пробел (32
), а в 160
й (0xA0
), и поэтому не обрезается с помощью trim()
.
Если вам далее потребуется вытащить только численное значение, то вы можете либо просто удалить подстроку pounds
, либо, если допустить, что там не всегда pounds
и т.п. воспользоваться соответствующим регулярным выражением:
preg_match("/\d+(?:\.\d+)?/", $weight, $matches);
тогда в $matches[0]
окажется зачение 1.5
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Виртуальный выделенный сервер (VDS) становится отличным выбором
Добрый день, можете помочь объяснить, почему после отправки сообщения, сообщение приходит со сломанной кириллицей? Правильно ли написаны...
Нужно вставить в вектор векторов еще один вектор векторов после k-той строки, но компилятор выдаёт ошибкуВот код: https://hastebin
Доброго времени суток! Написал небольшой класс и в нем QTimer, но при вызове start() приложение входит в вечный циклС моей точки зрения, все норм,...