2016-09-22 85 views
1

我有一個功能來抓取圖像src屬性section標籤。但它給我圖片這個指定的部分標記(選擇class)。

xPath選擇器不能正常工作

$doc = new DOMDocument(); 
@$doc->loadHTMLFile('http://www.akairan.com/health/bimari-behdasht/news201691911413397586.html'); 

$finder = new DomXPath($doc); 
$imgNodes = $finder->query('//article[@class="contentpaneopen_text"]//img/@src'); 

$images = array(); 
foreach($imgNodes as $node) { 
    echo $node->nodeValue . "<br />"; 
} 

結果是:

http://cdn64.akairan.com/files/images/20160919/20169/2016919114132436510a.jpg 
http://cdn2.akairan.com/akairan/telegram.jpg 
http://ser8.akairan.com/img/cdn/125/30/icmjthidoctor.ir.jpg 
http://ser9.akairan.com/img/cdn/180/80/akairan__aka__m998__027343234141194102a.jpg 
http://ser9.akairan.com/img/cdn/180/80/akairan__aka__m998__074496544283135102a.jpg 



但它應該返回只是第一個鏈接而不是別人。

回答

1

由於<article class="contentpaneopen_text">中存在多個<img>子女,因此獲得多個結果是正常現象。

您的xpath需要更加精確。我們可以看到,你想匹配的那個也應該有一個父母<a>,並且應該有一個title屬性。

嘗試:

//article[@class="contentpaneopen_text"]//a/img[@title!='']/@src 
+0

最後兩個結果不內部<文章類= 「contentpaneopen_text」>但是在結果中。這是我的問題。 @Yann – MehdiRahimi

+1

它們實際上在'

'裏面,因爲標籤沒有正確關閉。嘗試將DOMDocument轉儲到一個文件中,並在'loadHTMLFile'後面使用'$ doc-> saveHTMLFile('/ tmp/file.html');'來查看自己。 '
'在最後兩個結果後放置不好。儘管如此,使用我答案中提供的Xpath只能匹配所需的值。 –