xPath选择器不能正常工作
问题描述:
我有一个功能来抓取图像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
但它应该返回只是第一个链接而不是别人。
答
由于<article class="contentpaneopen_text">
中存在多个<img>
子女,因此获得多个结果是正常现象。
您的xpath需要更加精确。我们可以看到,你想匹配的那个也应该有一个父母<a>
,并且应该有一个title
属性。
尝试:
//article[@class="contentpaneopen_text"]//a/img[@title!='']/@src
答
'里面,因为标签没有正确关闭。尝试将DOMDocument转储到一个文件中,并在'loadHTMLFile'后面使用'$ doc-> saveHTMLFile('/ tmp/file.html');'来查看自己。 '
最后两个结果不内部但是在结果中。这是我的问题。 @Yann – MehdiRahimi
它们实际上在''里面,因为标签没有正确关闭。尝试将DOMDocument转储到一个文件中,并在'loadHTMLFile'后面使用'$ doc-> saveHTMLFile('/ tmp/file.html');'来查看自己。 ' '在最后两个结果后放置不好。尽管如此,使用我答案中提供的Xpath只能匹配所需的值。 –