试图获取页面的所有链接,但只存储标题标记中的链接

时间:2014-08-06 20:32:10

标签: php dom

我必须获取nodeValue是&#39;下载&#39;的所有链接,但是当我尝试首先获取所有链接,然后选择我需要的链接时,只有我的链接挑选了<header>标记。 &#39;下载&#39;链接位于页面的下方。

我做错了什么?

这是功能:

<?php
function rkm_download_links_fix($current_url) {
    $dom = new DOMDocument();
    libxml_use_internal_errors(true);
    $dom->loadHTMLFile($current_url);
    libxml_use_internal_errors(false);
    $urls = $dom->getElementsByTagName('a');
    print_r($urls); // here i get only links in <header>
    $url_copy = array();
    foreach ($urls as $url) {
        print_r($url->nodeValue);
        if($url->nodeValue == 'download') {
            $attributes = $url->attributes;
            $url_copy[] = array('url' => $url->getAttribute('href'));
        }
    }
 } ?>

如果您需要更多信息,请不要犹豫。

提前致谢!

1 个答案:

答案 0 :(得分:0)

为什么需要DOM?

简单的php:

<?php

function getLinks($url)
{
    $document = file_get_contents($url);
    $links = explode('<a', $document);
    $resultLinks = array();

    if(count($links) <= 1)
        return 'no links';
    for($i = 0; $i < count($links); ++$i)
    {
        if(mb_strpos($links[$i], '>download</a>', 0, 'UTF-8') === false &&
            mb_strpos($links[$i], '>Download</a>', 0, 'UTF-8') === false)
            continue;

        $hrefStart = mb_strpos($links[$i], 'href', 0, 'UTF-8');
        if($hrefStart === false)
            continue;

        $hrefStart += 4;
        $hrefStart = mb_strpos($links[$i], '"', $hrefStart, 'UTF-8');
        if($hrefStart === false)
            $hrefStart = mb_strpos($links[$i], '\'', $hrefStart, 'UTF-8');
            if($hrefStart === false)
                continue;
        ++$hrefStart;

        $hrefEnd = mb_strpos($links[$i], '"', $hrefStart, 'UTF-8');
        if($hrefEnd === false)
            $hrefEnd = mb_strpos($links[$i], '\'', $hrefStart, 'UTF-8');
            if($hrefEnd === false)
                continue;

        $resultLinks[] = mb_substr($links[$i], $hrefStart, ($hrefEnd - $hrefStart), 'UTF-8');
    }

    return $resultLinks;
}

$links = getLinks('http://parse/ws/try2.html');

echo '<pre>';
print_r($links);
echo '</pre>';