简体   繁体   English

如何在锚标记中提取所有img标记?

[英]How can I extract all img tag within an anchor tag?

I would like to extract all img tags that are within an anchor tag using the PHP DOM object. 我想使用PHP DOM对象提取锚标记内的所有img标记。

I am trying it with the code below but its getting all anchor tag and making it's text empty due the inside of an img tag. 我正在尝试使用下面的代码但它获取所有锚标记并使其文本为空,因为img标记的内部。

function get_links($url) {

    // Create a new DOM Document to hold our webpage structure
    $xml = new DOMDocument();

    // Load the url's contents into the DOM
    @$xml->loadHTMLFile($url);

    // Empty array to hold all links to return
    $links = array();

    //Loop through each <a> tag in the dom and add it to the link array
    foreach($xml->getElementsByTagName('a') as $link) 
    {
       $hrefval = '';
       if(strpos($link->getAttribute('href'),'www') > 0)
       {
           //$links[] = array('url' => $link->getAttribute('href'), 'text' => $link->nodeValue);
           $hrefval = '#URL#'.$link->getAttribute('href').'#TEXT#'.$link->nodeValue;
           $links[$hrefval] = $hrefval;
       }
       else
       {
           //$links[] = array('url' => GetMainBaseFromURL($url).$link->getAttribute('href'), 'text' => $link->nodeValue);
           $hrefval = '#URL#'.GetMainBaseFromURL($url).$link->getAttribute('href').'#TEXT#'.$link->nodeValue;
           $links[$hrefval] = $hrefval;
       }
    }

    foreach($xml->getElementsByTagName('img') as $link) 
    {
        $srcval = '';
       if(strpos($link->getAttribute('src'),'www') > 0)
       {
           //$links[] = array('src' => $link->getAttribute('src'), 'nodval' => $link->nodeValue);
           $srcval = '#SRC#'.$link->getAttribute('src').'#NODEVAL#'.$link->nodeValue;
           $links[$srcval] = $srcval;
       }
       else
       {
           //$links[] = array('src' => GetMainBaseFromURL($url).$link->getAttribute('src'), 'nodval' => $link->nodeValue);    
           $srcval = '#SRC#'.GetMainBaseFromURL($url).$link->getAttribute('src').'#NODEVAL#'.$link->nodeValue;
           $links[$srcval] = $srcval;

       }
    }

    //Return the links
    //$links = unsetblankvalue($links);
    return $links;
} 

This returns all anchor tag and all img tag separately. 这将分别返回所有锚标记和所有img标记。

$xml = new DOMDocument;
libxml_use_internal_errors(true);
$xml->loadHTMLFile($url);
libxml_clear_errors();
libxml_use_internal_errors(false);
$xpath = new DOMXPath($xml);
foreach ($xpath->query('//a[contains(@href, "www")]/img') as $entry) {
    var_dump($entry->getAttribute('src'));
}

The usage of strpos() function is not correct in the code. strpos()函数的使用在代码中是不正确的。

Instead of using 而不是使用

if(strpos($link->getAttribute('href'),'www') > 0)

Use 使用

 if(strpos($link->getAttribute('href'),'www')!==false )

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM