2016-09-22 118 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只能匹配所需的值。 –