2014-11-14 3 views
1

У меня есть код, который будет обрывать данные с веб-сайта. Вывод что-то вроде этого:
Сельского хозяйства
еды
одежды
Как я только вывести первую/п-й категория, такие как только (сельское хозяйство)? Я попробовалPHP Web Scraping

echo $sub_title[1].'<br/>'; 

но, похоже, не работает.

Мой код:

<?php 
$ch = curl_init('http://www.alibaba.com/Products'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13'); 
$html = curl_exec($ch); 
$dom = new DOMDocument(); 
@$dom->loadHTML($html); 
$finder = new DOMXPath($dom); 
$nodes = $finder->query('//h4[@class="sub-title"]'); 

foreach ($nodes as $node) { 
    $sub_title = trim(explode("\n", trim($node->nodeValue))[0]); 
    echo $sub_title.'<br/>'; 

} 

?> 

ответ

1

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

// indices start at zero 
$fifth = 4; // or 5 - 1 

foreach ($nodes as $key => $node) { 
    if($key == $fifth) { 
     $sub_title = trim(explode("\n", trim($node->nodeValue))[0]); 
     echo $sub_title.'<br/>'; 
    } 
} 

Или добавить еще запрос, чтобы явно указать его на эту n-ю позицию:

$fifth = $finder->evaluate(' 
    string(
     (//h4[@class="sub-title"])[5] 
    ) 
'); 
$fifth = explode("\n", trim($fifth)); 
echo $fifth[0]; 

Или положить их в контейнер (массив), а затем указать LY называть их по индексу (как в комментариях ниже):

$sub_title = array(); 
foreach ($nodes as $key => $node) { 
    $sub_title[] = trim(explode("\n", trim($node->nodeValue))[0]); 
} 

echo $sub_title[4]; // call fifth 
+0

THx @Ghost. Есть ли способ, когда я мог бы установить каждую из этих категорий в массив автоматически, а не писать так много переменной: $ one = 0; $ two = 1; $ три = 2; ..... поэтому я мог бы просто использовать echo $ sub_title [0]; для вывода каких-либо n-й категории? – Cael

+0

@Cael да его возможно, просто назначьте/нажмите их внутри массива, затем вызовите числовым индексом. проверить версию выше – Ghost

+0

получил! thx за помощь :) – Cael

1

Попробуйте это в цикле:

$sub_titles = explode("\n", $node->nodeValue); 
$first_sub_title = trim($sub_titles[0]); 
echo $first_sub_title.'<br/>';