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

Я работаю над веб-скребком. Я искал название продукта на веб-странице с моим продуктом. Если такой же продукт существует на странице, я хочу извлечь цену этого продукта. для этого я использую XPath

вот мой html-код, из которого мне нужно извлечь цену.

<div class="products_list_table">
    <table id="products_list_table_table" cellspacing="6" cellpadding="0" border="0">
       <tbody>
         <tr>
           <td valign="top" align="center">
              <span class="product_title">Malik Candy FC Composite Hockey Stick</span>
              <div class="list_price_bar all-cnrs">
                  <span class="list_price_title">Price Now:</span>
                  <span class="list_sale_price">£40.00</span>
              </div>
            </td>
         </tr>
        <tr>
           <td valign="top" align="center">
              <span class="product_title">Malik TC Stylish Hockey Stick</span>
              <div class="list_price_bar all-cnrs">
                  <span class="list_price_title">Price Now:</span>
                  <span class="list_sale_price">£70.00</span>
              </div>
            </td>
         </tr>

        ...
       </tbody>
     </table>
   <div>

Есть много тегов tr для всех продуктов, и я ищу название продукта, если он нашел, что я хочу извлечь цену этого продукта.

вот мой php-код в файле test.php

<?php
set_time_limit(0);
if(isset($_POST['title']) && $_POST['title']!= ''){ 
   $product_title = mysql_real_escape_string($_POST['title']);
   $url = 'http://www.example.com';
   $html = file_get_contents($url);     
   $doc = new DOMDocument(); 
   @$doc->loadHTML($html);      
   $xpath = new DOMXPath($doc);
   $found = $xpath->evaluate("boolean(//span[contains(text(), '". $product_title  ."' )])");
if($found == false){
     echo "Not Found";      
}
else { 
     $elements = $xpath->evaluate("//span[@class='list_sale_price']");
     if (!is_null($elements)) {
        foreach ($elements as $element) {
             $nodes = $element->childNodes;
             foreach ($nodes as $node) {
                 echo $node->nodeValue.'<br>';
                 }
        }
     }
}
 }

?>

здесь я использую форму в test.php для поиска продукта

<html>
<head>
<title></title>
</head>
<body>
   <form action="" method="post">
       <label>Enter product title to search</label><br /><br />
       <input type="text" name="title" size="50" /><br /><br />
       <input type="submit" value="Search" onclick="msg()"/>
   </form> 
</body>
</html>

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


person Dev001    schedule 16.05.2014    source источник


Ответы (1)


Вам не нужно несколько выражений. Вы можете извлечь цену с помощью одного выражения XPath, выбрав div после совпавшего span и в этом контексте извлекая его дочерний элемент span, который имеет класс list_sale_price:

//span[contains(text(), 'Malik Candy' )]/following-sibling::div/span[@class='list_sale_price']
person helderdarocha    schedule 16.05.2014
comment
Спасибо, holderdarocha, не могли бы вы рассказать мне, как отобразить эту цену, потому что она не могла отображаться в коде foreach, который я написал для отображения? - person Dev001; 19.05.2014