0

私はこれらの2つのクエリを持っています:


1)画像のすべてのURLを取得します。

$imgs = $xpath->query('//div[@class="pin"]/div[@class="PinHolder"]/a/img');



2)すべての画像をFacebookで高く評価した人の数を取得します。

foreach($xpath->query('//span[@class="LikesCount"]') as $span) {
    $int = (int) $span->nodeValue;
    if ($int > 5) {
        echo $i++ . "--> " . $int . "<br />";
    }
}



それらをマージして、Facebookで5回以上高く評価された画像だけを取得したいと思います 。とはいえ、高く評価されていない画像には、LikesCountクラスがまったくありません。

マークアップの例に従ってください。

<div class="pin">

[...]

<a href="/pin/56787645270909880/" class="PinImage ImgLink">
    <img src="http://media-cache-ec3.pinterest.com/upload/56787645270909880_d7AaHYHA_b.jpg" 
         alt="Krizia" 
         data-componenttype="MODAL_PIN" 
         class="PinImageImg" 
         style="height: 288px;">
</a>

<p class="stats colorless">
    <span class="LikesCount"> 
        22 likes 
    </span>
    <span class="RepinsCount">
        6 repins
    </span>
</p>

[...]

</div>
4

1 に答える 1

1

すべての画像ではなく、いいね数が5以上の画像のみを取得するには、割り当てのXPath式を次のように変更してみ$imgsます。

//div[@class="pin"]
     [.//span[@class = 'LikesCount']
             [substring-before(normalize-space(.),' ') > 5]]
     /div[@class="PinHolder"]
     /a/img

(これを少しわかりやすくするために空白を追加しました。XPathパーサーがこの問題の仕様に準拠していない場合は、改行を削除する必要がある場合があります[一部は準拠していません])。

cbuckleyがこれにXPath2.0が必要だと言っている理由は私にはわかりません。おそらく彼は、私が見ない微妙な問題をここで見ています。

于 2012-12-15T20:31:18.603 に答える