2013-04-17 65 views
0

我正在寫一個小刮板腳本,它將找到具有特定類名的圖像URL。我知道我的cURL和DOMDocument運行正常,甚至DomXPath真的(據我所知,沒有錯誤),但我正在努力解決如何獲取xpath查詢結果的URL。DomXPath與DOMDocument得到<img>類URL

到目前爲止我的代碼:

$dom = new DOMDocument(); 
@$dom->loadHTML($x); 

$xpath = new DomXpath($dom); 
$div = $xpath->query('//*[@class="productImage"]'); 


var_dump($div); 
echo $div->item(0); 

如果我的var_dump($ x)將頁面輸出中沒有問題。所以CURL工作正常。但我不知道如何獲取$ div中包含的數據。我正在試圖找到一個類似'productImage'的圖像,如下所示:

<img src="/uploads/5W/yP/5WyPP4l7Z-jmZRzu_MJ6zg/1077-d.jpg" border="1" alt="Album" class="productImage"> 

我想要圖像標記的來源。

有什麼建議嗎?

回答

2
$dom = new DOMDocument(); 
$dom->loadHTML($x); 

$xpath = new DomXpath($dom); 
$imgs = $xpath->query('//*[@class="productImage"]'); 

foreach($imgs as $img) 
{ 
    echo 'ImgSrc: ' . $img->getAttribute('src') .'<br />' . PHP_EOL; 
} 

試一下......

==編輯:附加信息==

我在這裏使用一個循環,因爲你可能會發現一個以上的IMG的原因。如果你知道只有一個元素(或您希望第一個DOM節點找到),您可以從通過的DOMNodeList的的DOMNodeList的項目方法訪問elelement - 像這樣:

$dom = new DOMDocument(); 
$dom->loadHTML($x); 

$xpath = new DomXpath($dom); 
$img = $xpath->query('//*[@class="productImage"]'); 

echo 'ImgSrc: ' . $img->item(0)->getAttribute('src') .'<br />' . PHP_EOL; 
+0

哦,天哪,謝謝。是否有列表列出了xpath查詢結果的所有對象函數?因爲我找不到它:S – Chud37

+0

如果您瀏覽文檔(http://www.php.net/manual/en/book.dom.php),您會看到xpath查詢返回一個DomNodeList。然後,您可以閱讀DomNodeList具有的合適的方法和方法(它每個只有一個)。當您可以訪問每個節點時,您可以在DomElement obj上閱讀以及如何訪問所有魔法。 –

+0

如果您只希望單個節點匹配,您可以將其轉換爲Xpath並直接獲取標量值:'$ img = $ xpath-> evaluate('string(// * [@ class =「productImage」]/@ src)');' – ThW

-1

你實際上並不需要這裏使用XPath,因爲它似乎你只是圖像後,可以通過使用DOMDocument::getElementsByTagName()來完成,然後通過簡單的過濾器:

foreach ($dom->getElementsByTagName('img') as $image) { 
    $class = $image->getAttribute('class'); 
    if (strpos(" $class ", " productImage ") !== false) { 
     $url = $image->getAttribute('src'); 
     // do stuff 
    } 
} 

然後,您可以通過使用DOMElement::getAttribute()得到src屬性:

echo $image->getAttribute('src'); 
+0

strpos(「$ class」,「productImage」)無法匹配OP的示例。 – ChrisJJ

+0

@ChrisJJ你是什麼意思? –

+0

對不起,我的錯。請忽略。 – ChrisJJ