通过DOMDocument获取链接标签

时间:2018-09-10 12:29:14

标签: php domdocument

我使用atom2rss.xsl将原子供稿转换为RSS。工作良好。

然后,我使用DOMDocument尝试获取帖子标题和URL:

$feed = new DOMDocument();
$feed->loadHTML('<?xml encoding="utf-8" ?>' . $html);

if (!empty($feed) && is_object($feed) ) {
    foreach ($feed->getElementsByTagName("item") as $item){
        echo 'url: '. $item->getElementsByTagName("link")->item(0)->nodeValue;
        echo 'title'. $item->getElementsByTagName("title")->item(0)->nodeValue;
    }
    return;
}

但是帖子网址为空。

请参阅此eval which contains HTML。我究竟做错了什么?我怀疑我无法通过$item->getElementsByTagName("link")->item(0)->nodeValue正确获取链接标记。

2 个答案:

答案 0 :(得分:2)

我认为问题在于,每个项目中都有几个<link>元素,而您感兴趣的一个(我认为)是一个以rel="self"作为属性的元素。最快的方法(不弄乱XPath)是遍历每个<link>元素,检查正确的rel值,然后从中获取href属性...

if (!empty($feed) && is_object($feed) ) {
    foreach ($feed->getElementsByTagName("item") as $item){
        $url = "";
        // Look for the 'right' link tag and extract URL from that
        foreach ( $item->getElementsByTagName("link") as $link )    {
            if ( $link->getAttribute("rel") == "self" ) {
                $url = $link->getAttribute("href");
                break;
            }
        }
        echo 'url: '. $url;
        echo 'title'. $item->getElementsByTagName("title")->item(0)->nodeValue;
    }
    return;
}

这给...

url: https://www.blogger.com/feeds/2984353310628523257/posts/default/1947782625877709813titleExtraordinary Genius - Cp274

答案 1 :(得分:0)

   function get_links($link)
    {
        $ret = array();
        $dom = new DOMDocument();
        @$dom->loadHTML(file_get_contents($link));
        $dom->preserveWhiteSpace = false;
        $links = $dom->getElementsByTagName('a');
        foreach ($links as $tag){
            $ret[$tag->getAttribute('href')] = $tag->childNodes->item(0)->nodeValue;
        }

        return $ret;
    }
  print_r(get_links('http://www.google.com')); 

或者您可以使用DOMXpath

$html = file_get_contents('http://www.google.com');
    $dom = new DOMDocument();
    @$dom->loadHTML($html);

    // take all links
    $xpath = new DOMXPath($dom);
    $hrefs = $xpath->evaluate("/html/body//a");

    for ($i = 0; $i < $hrefs->length; $i++) {
           $href = $hrefs->item($i);
           $url = $href->getAttribute('href');
           echo $url.'
    ';