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 に答える