首页 > 解决方案 > 用于测试页面上所有链接的递归函数

问题描述

我正在编写来自整个网站的爬虫链接,包括子页面,遇到了一个小问题。我想出了使用递归函数的想法,因为我要扫描的页面有几个层次。它的结构或多或少看起来像这样:

Level 1 reference
- Second level reference
-- Third level reference
-- Third level reference
- Second level reference
-- Third level reference
-- Third level reference
-- Third level reference
--- Level four reference

被测试的链接下是否隐藏了更多或更少的东西从来都不是很清楚,因此我想出了递归函数的想法。

它需要一个指向主页的链接,获取第一个链接,如果其中的链接数大于一个,则表示相同的功能。

不幸的是,出了点问题,我得到一个空的白板,我该如何解决?

function scanWebsite($url) {

        $html = file_get_contents($url);
        $dom = new DOMDocument();
        @$dom->loadHTML($html);

        $xpath = new DOMXpath($dom);
        $nodes = $xpath->query("/html/body//a");

        $output = [];

        foreach($nodes as $node) {

            $url = $node->getAttribute("href");

            if(count($nodes) > 1) {

                scanWebsite("http://samplewebsite.com" .$url);

            } else {

                if(preg_match("/\/title\/.*\//", $url)) {

                    array_push($output, $url);

                }

                continue;

            }

        }

        return $output;

    }

    echo '<pre>';
    print_r(scanWebsite("http://samplewebsite.com"));
    echo '</pre>';

标签: phpweb-scraping

解决方案


推荐阅读