1

我正在尝试为这个页面报废

在此处输入图像描述

我正在使用 xPath 来选择它,我的代码是..

$safeFlag = true ;
//*[@id="tabset_productPage"]/dd[1]/div/div   //HAVE TRIED THIS TOO
//*[@id="tabset_productPage"]/dd[1]/div/div  // HAVE TRIED THIS
$safety_query='//*[@id="tabset_productPage"]/dd[1]/div/div/text()'; 
    $safety = $xpath->query($description_query);



    foreach ($safety as $word1) {

        $safety_warning[]=(trim($word1->nodeValue));
        if($safety_warning != ''){
        $safeFlag = false ;
        $safety_warning[]= 'NO SAFETY WARNING..';
        }
    }


var_dump($safety_warning);

对于描述文本,我使用 xPath

//*[@id="tabset_productPage"]/dd[1]

但问题是,使用所有这些,我完全得到了安全警告和描述......

我的问题是,我想分别选择安全警告和描述文本,但我总是将它们作为一个整体,包括安全警告和描述的完整文本,对于上面的所有 xPath.. 此外,html 结构并不总是相同的..描述有时可以<br> or <p>放置标签,

有人可以指导我吗?一些建议或大纲我怎样才能做到这一点?如何将安全警告/描述放在单独的列/变量中,而两者都是同一元素的子元素..

谢谢..

4

2 回答 2

1

安全警告是 的第一个文本子节点//dl[@id="tabset_productPage"]/dd[1]/。要从选择中排除它,您可以选择位置大于 1 的所有文本节点。获取描述的查询如下所示:

$description_query='//dl[@id="tabset_productPage"]/dd[1]/text()[position()>1]';

我准备了一个例子来测试它。它来了:

$link = 'http://www.toysrus.com/product/index.jsp?productId=3685677&cp=2255956.2273442.2469772.3263938&green';

$html = file_get_contents($link);
$doc = new DOMDocument();
@$doc->loadHtml($html);

$selector = new DOMXPath($doc);

$safety_query='//*[@id="tabset_productPage"]/dd[1]/div/div/text()';
$safety = $selector->query($safety_query);
$safety_warning = $safety->item(0)->nodeValue;

echo 'Safety Warning: ', $safety_warning, PHP_EOL;

// select text nodes with a position greater than 1
$description_query='//dl[@id="tabset_productPage"]/dd[1]/text()[position()>1]';
$description_result = $selector->query($description_query);

$paragraphs = array();
foreach($description_result as $node) {
    $value = $node->nodeValue;
    if(trim($value) !== '') {
        $paragraphs []= $value;
    }   
}

$description = implode(PHP_EOL . PHP_EOL, $paragraphs);
echo 'Description: ', $description, PHP_EOL;
于 2013-01-22T20:15:42.400 回答
0

你有没有尝试过

//div[@class = "safetyWarning"]

用于安全警告和

//div[@id= "infoPanel"]/dl/dd/text()

产品描述?

于 2013-01-22T19:54:06.417 回答