我使用SimpleHTMLDOM从其他网页抓取东西,但我有一个问题如何在图像ancor标签内部获取网址,因为该网页包含锚标签以及图像锚标签!但我只想在图像锚标签旁边获得href值!
<a href="I DO NOT NEED THIS VALUE"><a/>
<a href="I NEED THIS VALUE"><img src="xxxx"><a/>
但是当调用DOM时,它返回所有href URL,包括链接锚URL!我只需要图像锚标记内的URL!
我使用此代码来调用..
$hrefl = $html->find('a');
$count = 1;
for( $i = 0; $i < 50; $i++){
echo $hrefl[$count]->href;
$count++;
}
答案 0 :(得分:4)
可能您正在使用simplehtmldom library进行解析 我不太了解它,我使用DOMDocument来解析所有目的。
我可以建议的非常快速的解决方法是检查锚标签是否包含图像,如果是,则获取值,否则跳过它。
这样的事情:
<?php
$doc = new DOMDocument();
@$doc->loadHTMLFile($urlofhtmlpage);
foreach($doc->getElementsByTagName('a') as $a){
foreach($a->getElementsByTagName('img') as $img){
echo $a->getAttribute('href');
}
}
?>
答案 1 :(得分:3)
您需要包含图像标记的每个链接的href属性。使用xpath非常简单:
//a/img/../@href
你写道你使用DOM,你的代码看起来像是用简单的html dom编写的。该库是有限的,现在不再需要了,因为PHP有DOMDocument
和DOMXPath
个对象。我认为简单的html DOM没有xpath,
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$hrefs = $xpath->query('//a/img/../@href');
$count = $hrefs->length;
foreach($hrefs as $href)
{
echo $href->nodeValue, "\n";
}
答案 2 :(得分:3)
试试这个:
$hrefl = $html->find('a');
$count = 1;
for( $i = 0; $i < 50; $i++){
$img = $hrefl[$count]->find('img');
// check if var exists and is valid
if ($img ... ) {
echo $hrefl[$count]->href;
}
$count++;
}