Отказ от сайта с использованием Regex и т. Д.

У меня проблемы с извлечением целых чисел в скобках с этого сайта.

Часть разметки с сайта:

<span class="b-label b-link-number" data-num="(322206)">Music &amp; Video</span>
<span class="b-label b-link-number" data-num="(954218)">Toys, Hobbies &amp; Games</span>
<span class="b-label b-link-number" data-num="(502981)">Kids, Baby &amp; Maternity</span>

Как извлечь целые числа в скобках?

Желаемый результат:

322206
954218
502981

Должен ли я использовать Regex, поскольку они получили одно и то же имя класса (но не Regex для перехода между скобками, поскольку в скобках есть и другие нежелательные элементы, а также из исходного кода).

Обычно это будет способ, которым я использую для извлечения информации:

<?php
//header('Content-Type: text/html; charset=utf-8');
$grep = new DoMDocument();
@$grep->loadHTMLFile("http://global.rakuten.com/en/search/?tl=&k=");
$finder = new DomXPath($grep);
$class = "b-list-item";
$nodes = $finder->query("//*[contains(@class, '$class')]");

foreach ($nodes as $node) {
$span = $node->childNodes;
$search = array(0,1,2,3,4,5,6,7,8,9,'(',')');
$categories = str_replace($search, '', $span->item(0)->nodeValue);
echo '<br>' . '<font color="green">' . $categories . '  ' . '</font>' ;

}
?>

но так как данные, которые я хочу, находятся внутри тега, как их извлечь?

1

Решение

Добавление в ваш текущий код, это просто прямо, просто измените это $class в этот класс вы хотите и используете ->getAttribute() чтобы получить те data-num«S:

$grep = new DoMDocument();
@$grep->loadHTMLFile("http://global.rakuten.com/en/search/?tl=&k=");
$finder = new DomXPath($grep);
$class = "b-link-number"; // change the span class
$nodes = $finder->query("//*[contains(@class, '$class')]"); // target those

$numbers = array();
foreach ($nodes as $node) { // for every found elemenet
$link_num = $node->getAttribute('data-num'); // get the attribute `data-num`
$link_num = str_replace(['(', ')'], '', $link_num); // simply remove those parenthesis
$numbers[] = $link_num; // push it inside the container
}

echo '<pre>';
print_r($numbers);
2

Другие решения

<span[^>)()]*\((\d+)\)[^>]*>

Попробуйте это. Захватите захват. См. Демонстрацию.

http://regex101.com/r/iM2wF9/10

1

По вопросам рекламы [email protected]