Я работаю над веб-скребком. Я искал название продукта на веб-странице с моим продуктом. Если на странице есть тот же продукт, я хочу извлечь цену этого продукта. для этого я использую 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>
Есть много тэгов для всех продуктов, и я ищу название продукта, если он нашел, что я хочу извлечь стоимость этого продукта.
вот мой 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 для извлечения цены совпадающего продукта.
Вам не нужны несколько выражений. Вы можете извлечь цену одним выражением XPath, выбрав div
соответствующий вашему совпадающему span
, и в этом контексте извлечение его дочернего span
который имеет класс list_sale_price
:
//span[contains(text(), 'Malik Candy' )]/following-sibling::div/span[@class='list_sale_price']