如何使用SimpleHTMLDOM获取图像锚标记内的URL

时间:2012-05-05 17:46:15

标签: php

我使用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++;

 }

3 个答案:

答案 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有​​DOMDocumentDOMXPath个对象。我认为简单的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";
}

Demo

答案 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++;
 }