HTML — Очистка веб-сайта с использованием переполнения стека

У меня есть PHP-код, который может извлечь категории продуктов на этом сайте: http://www.tradeindia.com/. Пока мне удалось извлечь только категории. Как мне сделать так, чтобы он также извлекал номера продуктов рядом с ним, поскольку его нет ни в каком классе?

Мой код:

<?php
//header('Content-Type: text/html; charset=utf-8');
$grep = new DoMDocument();
@$grep->loadHTMLFile("http://www.tradeindia.com/");
$finder = new DomXPath($grep);
$class = "cate_menu";
$nodes = $finder->query("//*[contains(@class, '$class')]");

$total_L = 0;
foreach ($nodes as $node) {
$span = $node->childNodes;
echo '<br>' . $span->item(0)->nodeValue . ' : ';
}

?>

Исходный код с сайта:

<td align="left" style="padding-left:8px;color:blue"><a href=/Seller/Agriculture/ class="cate_menu" >Agriculture</a>(100892)</td>
<td align="left" style="padding-left:8px;color:blue"><a href=/Seller/Apparel-Fashion/ class="cate_menu" >Apparel & Fashion</a>(237902)</td>
<td align="left" style="padding-left:8px;color:blue"><a href=/Seller/Automobile/ class="cate_menu" >Automobile</a>(78614)</td>

Мне нужны цифры в скобках.

1

Решение

Я не гуру xpath, но то, что я хотел бы сделать, — это сначала нацелиться на конкретную таблицу, используя эти категории игл, затем оттуда получить эти строки на основе этого и начать зацикливаться на найденных строках.

Грубый пример:

$grep = new DOMDocument();
@$grep->loadHTMLFile("http://www.tradeindia.com/");
$finder = new DOMXpath($grep);

$products = array();
$nodes = $finder->query("//td[@class='showroom1'][contains(text(), 'CATEGORIES')]
/parent::tr/parent::table/parent::td/parent::tr
/following-sibling::tr
/td[1]/table/tr/td/table/tr
");

if($nodes->length > 0) {
foreach($nodes as $tr) {
if($finder->evaluate('count(./td/a)', $tr) > 0) {
foreach($finder->query('./td/a[@class="cate_menu"]', $tr) as $row) {
$text = $row->nodeValue;
$number = $finder->query('./following-sibling::text()', $row)->item(0)->nodeValue;
$products[] = "$text $number";
}

}
}
}

echo '<pre>';
print_r($products);

Пример вывода

3

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

Поскольку число находится в двух скобках, это должно быть легко. Вы можете использовать такую ​​функцию;

function get_string_between($string, $start, $end) {
$string = " ".$string;
$ini = strpos($string,$start);
if ($ini == 0) return "";
$ini += strlen($start);
$len = strpos($string,$end,$ini) - $ini;
return substr($string,$ini,$len);
}

$product = get_string_between($htmlline, "(", ")");

Вам нужно будет вставить каждую строку таблицы отдельно. Вы можете перебрать массив строк, содержащих каждую строку; foreach($htmllines as $htmlline) или похожие.

Надеюсь это поможет.

1

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