2016-08-13 4 views
0

Я слом данные с веб-сайта, что исходный код являетсяПроблемы с выскабливание данных в PHP

view-source:http://www.pakdukaan.com/75-computer-cases 

код, я использую, чтобы очистить данные это

<?php 
$html = file_get_contents('http://www.pakdukaan.com/75-computer-cases'); 

$pk_doc = new DOMDocument(); 
libxml_use_internal_errors(TRUE); 

if(!empty($html)){ 
$pk_doc->loadHTML($html); 
libxml_clear_errors(); 
$pk_xpath = new DOMXPath($pk_doc); 
$pk_list = array(); 
$pk_and_price = $pk_xpath->query('//div[@class="product_list list row "]'); 

if($pk_and_price->length > 0){ 

foreach($pk_and_price as $pat){ 
    $name = $pk_xpath->query('//h5[@class="name"]', $pat)->item(0)->nodeValue; 
    $pkmn_types = array(); 
    $price = $pk_xpath->query('//span[@class="price product-price"]', $pat) 

    foreach($types as $type){ 
     $pkmn_types[] = $type->nodeValue; 
    } 
    $pk_list[] = array('name' => $name, 'price' => $pkmn_price); 

} 
} 
} 

//output what we have 
echo "<pre>"; 
echo print_r($pk_list); 
echo "</pre>"; 
?> 

Но вместо того, чтобы все случаи имена, я получаю только одну и другую вещь, я получаю все цены на эти случаи дважды.

Это выход

Array 
(
[0] => Array 
    (
     [name] => 

       Thermaltake V2 Plus + 350W Power Supply 


     [price] => Array 
      (
       [0] => 
         Rs. 4,099      
       [1] => 
         Rs. 4,099      
       [2] => 
         Rs. 5,899      
       [3] => 
         Rs. 5,899      
       [4] => 
         Rs. 8,499      
       [5] => 
         Rs. 8,499      
       [6] => 
         Rs. 9,499      
       [7] => 
         Rs. 9,499      
       [8] => 
         Rs. 10,350      
       [9] => 
         Rs. 10,350      
       [10] => 
         Rs. 12,999      
       [11] => 
         Rs. 12,999      
       [12] => 
         Rs. 17,799      
       [13] => 
         Rs. 17,799      
       [14] => 
         Rs. 16,199      
       [15] => 
         Rs. 16,199      
       [16] => 
         Rs. 17,299      
       [17] => 
         Rs. 17,299      
       [18] => 
         Rs. 16,500      
       [19] => 
         Rs. 16,500      
       [20] => 
         Rs. 5,899      
       [21] => 
         Rs. 5,899      
       [22] => 
         Rs. 8,399      
       [23] => 
         Rs. 8,399      
       [24] => 
         Rs. 4,999      
       [25] => 
         Rs. 4,999      
       [26] => 
         Rs. 7,599      
       [27] => 
         Rs. 7,599      
       [28] => 
         Rs. 9,999      
       [29] => 
         Rs. 9,999      
      ) 
    ) 
) 
1 

Может кто-нибудь помочь с проблемой? Я пробовал много изменить классы div в исходном коде сайта, но не смог получить соответствующий результат.

+0

Проверьте структуру html еще раз. –

ответ

0

Итак, давайте проверим ваши ошибки:

Первый: вы запрашиваете $pk_xpath->query('//h5[@class="name"]', $pat), а затем взять только item(0).

Это значит, что вы skip все остальные DOMNodes в xpath-query. Но если вы сделаете это:

$names = $pk_xpath->query('//h5[@class="name"]', $pat); 
foreach ($names as $n) { 
    echo $n->nodeValue . PHP_EOL; 
} 

Вы увидите все имена со своей страницы.

Второй: цены. Если вы проверите html скребковой страницы, вы увидите, что span[@class="price product-price"]удваивает для каждого элемента. Один вид span виден, а второй - для всплывающего блока, в настоящее время скрытого.

Итак, вам нужен еще один запрос xpath, например, вы можете найти все .product-meta элементов, а затем найти в них price product-price.

+0

Я просто знаком с этим скребком! Можете ли вы рассказать мне, как это сделать? –

Смежные вопросы