Php 什么';是什么让我的网络爬虫变慢了?

Php 什么';是什么让我的网络爬虫变慢了?,php,curl,apache2,Php,Curl,Apache2,嗨!我正在用php制作一个网络爬虫。一开始我刚开始 web内容(使用函数get_links),速度很快,但是 在添加了所有其他功能之后,它变得非常缓慢。 我的网络爬虫真的在爬行。当我检查网络监视器时 在Inspector一案中,我根本没有得到任何回应。可能是什么 问题出在哪里?互联网速度是一个因素吗?为什么要花很长时间才能完成 负载如果你可能会问,我的平台是Ubuntu15.4,我只是在用一个 本地主机作为服务器。这是我的密码 我将向您发送一个链接,以便对其进行彻底调查,因为它就像web上的jq

嗨!我正在用php制作一个网络爬虫。一开始我刚开始 web内容(使用函数get_links),速度很快,但是 在添加了所有其他功能之后,它变得非常缓慢。 我的网络爬虫真的在爬行。当我检查网络监视器时 在Inspector一案中,我根本没有得到任何回应。可能是什么 问题出在哪里?互联网速度是一个因素吗?为什么要花很长时间才能完成 负载如果你可能会问,我的平台是Ubuntu15.4,我只是在用一个 本地主机作为服务器。这是我的密码


我将向您发送一个链接,以便对其进行彻底调查,因为它就像web上的jquery一样。这是一款高质量的网络爬虫软件,相信我,你的工作效率会更高

看一看例子,然后感谢我:)


嗨,k

Hi@RealJho你试过simplehtmldom吗?它将帮助您不再重新发明轮子,而是使用自定义函数,而是使用简单的类似jquery的函数从链接、表等获取信息:)@oserk这是否意味着解析会使它变慢?可能是您的正则表达式进行了太多的匹配,或者在get_doman或get_links函数中存在太多的循环,这些函数使您的脚本工作缓慢,我不知道您没有复制代码,所以我无法调试,,但是你应该重新考虑一下我发给你的simplehtmldom库链接..嗨@oserk我试过使用simplehtmldom,它速度快得难以置信。但它只是获取html脚本。我想要的是获取.js脚本和图像。你能建议我怎么做吗?或者如何为preg_匹配生成一个好的正则表达式?我认为这是另一个问题,与快速html获取/解析无关。如果我对您的问题的建议帮助或解决了您最初的问题,请将其标记为已解决并提出另一个问题,但请在您运行到的js文件中发布一些具体问题。。嗯,克雷索
<?php
    error_reporting(E_ALL);
    ini_set('display_errors', '1');


    $to_crawl = "http://bestspace.com";
    $c = array();
    $i = 0;

    function get_links($url) {
        global $c;
        $input  = @file_get_contents($url);
        $regexp = "<a\s[^>]*href=(\"??)([^\">]*?)\\1[^>]*>(.*)<\/a>";
        preg_match_all("/$regexp/siU", $input, $matches);
        $base_url = parse_url($url, PHP_URL_HOST);
        $l = $matches[2];

        foreach($l as $link) {

            if (strpos($link, "#")) {
                $link = substr($link, 0, strpos($link, "#"));
            }
            if (substr($link,0,1) == ".") {
                $link = substr($link, 1);
            }
            if (substr($link,0,7) == "http://") {
                $link = $link;
            }
            else if (substr($link,0,8) == "https://") {
                $link = $link;
            }
            else if (substr($link,0,2) == "//") {
                $link = substr($link, 2);
            }
            else if (substr($link,0,1) == "#") {
                $link = $url;
            }
            else if (substr($link,0,7) == "mailto:") {
                $link = "[".$link."]";
            }
            else {
                if (substr($link, 0, 1) != "/") {
                    $link = $base_url."/".$link;
                }
                else {
                    $link = $base_url.$link;
                }
            }

            if (substr($link, 0, 7) != "http://" && substr($link, 0, 8) != "https://" && substr($link, 0, 1) != "[") {
                if (substr($link, 0, 8) == "https://") {
                    $link = "https://".$link;
                }
                else {
                    $link = "http://".$link;
                }
            }
            //echo $link."<br/>";
            if (!in_array($link, $c)) {
                array_push($c, $link);
            }

        }
    }

    get_links($to_crawl);
    //echo "ARRAY <br />";
    foreach ($c as $page) {
        # code...
        get_links($page);
        //echo $page."<br />";
    }


    function get_domain($url)
    {
        $host = @parse_url($url, PHP_URL_HOST);
        if (!$host)
            $host = $url;

        if (substr($host, 0, 4) == "www.")
            $host = substr($host, 4);

        if (strlen($host) > 50)
            $host = substr($host, 0, 47) . '...';

        return $host;
    }


    function content_type($url) {

        $ch = curl_init($url);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1) ;
        $content = curl_exec($ch);
        if(!curl_errno($ch))
            {
                $info = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);

            }
    return $info;
    curl_close($ch);

    }


        echo "<table class = 'table table-striped'>";
        echo "<tbody>";
        echo "<tr>";
        echo "<th>#</th><th>DOMAIN NAME</th><th>CATEGORY</th><th>URL</th>";
        echo "</tr>";
    foreach ($c as $page) {
        $i++;
        echo "<tr>";
        echo "<td >".$i."</td><td>".get_domain($to_crawl)."</td><td>".content_type($page)."</td><td>".$page;
        echo "</td>";

        echo "</tr>";
        }
        echo "</tbody>";
        echo "</table>";

    ?>