我正在尝试为此page
进行搜索
我正在使用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]
但问题是,使用所有这些,我完全得到安全警告和描述..
我的问题是,我想单独选择SAFETY WARNING和DESCRIPTION文本,但我总是将它们作为一个整体,包括安全警告和描述的完整文本,用于以上所有xPath。
另外,html结构并不总是相同的..有时可能会有<br> or <p>
标签,
感谢..
答案 0 :(得分: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;
答案 1 :(得分:0)
你试过吗
//div[@class = "safetyWarning"]
用于安全警告和
//div[@id= "infoPanel"]/dl/dd/text()
产品说明?