Получение значений узлов с сайта и повторный вывод только выбранных тегов узлов, которые можно стилизовать
Я дергаю себя за волосы, пытаясь заставить это работать с php.
Проблема: я просто пытаюсь вычистить продукты с сайта и сделать так, чтобы они отображались в виде списка продуктов без чего-либо еще, что я могу создать в CSS. Что я хотел бы вывести <div id='product'><a href= $link ><img src= $image /></a><br/><p>$productText</p></div>
в виде списка товаров для сайта (в основном их очищают). Это проект, который я пытаюсь развлечь, вот код:
$html = new DOMDocument();
@$html->loadHtmlFile('http://www.amazon.com/gp/search/ref=sr_nr_p_8_3?rh=n%3A2619533011%2Ck%3Apet+products%2Cn%3A%212619534011%2Cn%3A2975312011%2Cp_72%3A2661618011%2Cp_8%3A2661607011&bbn=2975312011&keywords=pet+products&ie=UTF8&qid=1328429080&rnid=2661603011#/ref=sr_st?bbn=2975312011&keywords=pet+products&qid=1328429127&rh=n%3A2619533011%2Ck%3Apet+products%2Cn%3A!2619534011%2Cn%3A2975312011%2Cp_72%3A2661618011%2Cp_8%3A2661607011');
$xpath = new DOMXPath( $html );
$productName = $xpath->query( "//div[@id='btfResults']/div/div[4]/div[1]/a/text()" );
$link = $xpath->query( "//div[@id='btfResults']/div/div[3]/a/@href" );
$image = $xpath->query( "//div[@id='btfResults']/div/div[3]/a/img/@src" );
foreach ($productName as $n){
$productText = $n->nodeValue;
}
foreach ($image as $n){
$imageLink = $n->nodeValue;
}
foreach ($link as $n){
$linkLink = $n->nodeValue;
}
foreach ($link as $n)
{
echo "<div id='product'><a href= $linkLink ><img src= $imageLink /></a><br/><p>$productText</p></div>";
}
Правда в том, что я понятия не имею, как получить правильные результаты, которые я хочу. Дайте мне знать, если это требует дальнейшего объяснения. Спасибо!
1 ответ
Исправлено и проверено:
<?php
$html = new DOMDocument();
@$html->loadHtmlFile('http://www.amazon.com/gp/search/ref=sr_nr_p_8_3?rh=n%3A2619533011%2Ck%3Apet+products%2Cn%3A%212619534011%2Cn%3A2975312011%2Cp_72%3A2661618011%2Cp_8%3A2661607011&bbn=2975312011&keywords=pet+products&ie=UTF8&qid=1328429080&rnid=2661603011#/ref=sr_st?bbn=2975312011&keywords=pet+products&qid=1328429127&rh=n%3A2619533011%2Ck%3Apet+products%2Cn%3A!2619534011%2Cn%3A2975312011%2Cp_72%3A2661618011%2Cp_8%3A2661607011');
$xpath = new DOMXPath( $html );
$btfResults = $xpath->query("//div[@id='btfResults']/div"); // get all item nodes
foreach ($btfResults as $node) // iterate through all items
{
$productText = $linkLink = $imageLink = null; // reset result variables for each loop
if ($productName = $xpath->query("./div[4]/div[1]/a/text()", $node)->item(0)) // fetch productName node from the item
{
$productText = $productName->nodeValue;
}
if ($link = $xpath->query("./div[3]/a/@href", $node)->item(0)) // fetch link node from the item
{
$linkLink = $link->nodeValue;
}
if ($image = $xpath->query("./div[3]/a/img/@src", $node)->item(0)) // fetch image node from the item
{
$imageLink = $image->nodeValue;
}
if ($productText && $linkLink && $imageLink) // only return a result when all variables are set.
{
echo '<div id="product"><a href="'.$linkLink.'"><img src="'.$imageLink.'"/></a><br/><p>'.$productText.'</p></div>';
}
}