首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cURL获取网站中的所有链接(不仅仅是页面)

问使用cURL获取网站中的所有链接(不仅仅是页面)
EN

Stack Overflow用户
提问于 2011-08-12 02:36:59
回答 3查看 15.4K关注 0票数 6

我使用以下PHP脚本来获取给定页面上的所有链接,但我试图获取整个网站上的所有链接。

代码语言:javascript
复制
<?php

    function urlLooper($url){

        $urlArray = array();

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $result = curl_exec($ch);

        $regex='|<a.*?href="(.*?)"|';
        preg_match_all($regex,$result,$parts);
        $links=$parts[1];
        foreach($links as $link){
            array_push($urlArray, $link);
        }
        curl_close($ch);

        foreach($urlArray as $value){
            echo $value . '<br />';
        }
    }

    $url = 'http://www.justfundraising.com/';
    urlLooper($url);

?>

有没有办法使用cURL (坦率地说,还有其他方法)来获取一个网站上的所有链接?如果你想知道的话我可以进入服务器。

我的想法是从主页生成所有链接,然后通过相同的函数将这些链接传递回来,以获得一个新的链接列表,忽略任何重复的链接。我想这样我会得到所有的页面。

任何帮助都将不胜感激!

EN

回答 3

Stack Overflow用户

发布于 2011-08-13 20:17:51

正如@mario在上面提到的,也许可以考虑使用phpQuery (http://code.google.com/p/phpquery/)。下载了该库并将其包含在页面上之后,下面是一些示例代码,展示了如何获得一个数组,该数组包含您传递给它的字符串中的所有链接(我刚刚在newDocument函数中硬编码了一个字符串作为示例):

代码语言:javascript
复制
$links = phpQuery::newDocument('<a href="test1.html">Test 1</a><a href="test2.html">Test 2</a><a href="test3.html">Test 3</a>')->find('a');
$array_links = array();
foreach($links as $r) {
    $array_links[] = pq($r)->attr('href');
}
die("<pre>".print_r($array_links,true)."</pre>");

上面的代码将返回:

代码语言:javascript
复制
Array
(
    [0] => test1.html
    [1] => test2.html
    [2] => test3.html
)

希望这能有所帮助。

票数 3
EN

Stack Overflow用户

发布于 2011-08-12 02:40:37

curl只获取您告诉它的内容。它不会为您解析内容,也不会递归地获取内容所引用的“外部”资源。您必须自己在返回的HTML中查找,解析出图像/脚本链接,并使用更多的curl调用来获取这些链接。

换句话说,您必须复制wget,这可以归结为:只使用wget。

票数 1
EN

Stack Overflow用户

发布于 2011-08-15 15:57:19

我也在尝试使用simplehtmldom进行同样的操作。但是代码在一段时间后崩溃了。实际上,我在这里尝试使用dfs方法,它可能会在某一点上溢出堆栈。

您可以使用cURL检查此方法

下面是我的代码:

代码语言:javascript
复制
<?php
traverse($home,0);

function traverse($url,$depth)
{
if($depth>1)return;
$html = file_get_html($url);
foreach($html->find('a') as $element)
{
    $nurl = $element->href;
    echo $nurl."<br>";
    traverse($nurl,$depth+1);

}
}
?>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7031058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档