Как оптимизировать этот код для веб-сканера? - PullRequest
0 голосов
/ 26 апреля 2019

Я практикую webcrawler и мне нужно оптимизировать этот код, я новичок и написал этот код, я чувствую, что он очень медленный, как я могу его оптимизировать? Вкратце, я хочу получить страницы этой электронной коммерции и отфильтровать скидки и кэшбэки, которые я определю. Пожалуйста, дайте мне предложения. благодарен!

уже попробовал как libs жульник простого компаратора и PHPHtmlParser, я также пытался пройти cURL и file_get_contents

<?php
require "vendor/autoload.php";
use PHPHtmlParser\Dom;

echo 'INICIANDO<br/>';

$ame = 15;
$discount = 15;
$busca = 'https://www.shoptime.com.br/lojista/b2w';
$padraoPagina = 2;  //1 é soma 24 , 2 é padrão 'pagina-1'
$numPaginaMax = 5000; //valor a ser imputado para o numero maximo de paginas a ser buscado
$offset = 24;
$numPagina = 0;


function soNumero($str) {
    return preg_replace("/[^0-9]/", "", $str);
}


for ($i = 1; $i <= $numPaginaMax; $i++) {

    $url = $busca;

    if ($padraoPagina == 1) {

        $i == 1 ? $numPagina = 0 : $numPagina += $offset; //usando operador ternario (praticando)
        $url .= "?limite=24&offset=".$numPagina;    

    }

    else { //diferente de $padraoPagina ==1
        $numPagina = '/pagina-'.$i;
        $url .= "$numPagina";   
    }


    $html = new Dom;

    foreach ($html->loadFromUrl($url)->find('a.card-product-url') as $ref2) {
    $url_produto_localizado  = 'https://www.shoptime.com.br'.$ref2->getAttribute('href');

    unset($html);

    $html2 = new Dom;
    $html2->loadFromUrl($url_produto_localizado);

    $discountProd = $html2->find('span.discount',0); // desconto no produto

         if (!empty($discountProd)) { //testar ($discountProd !== null) e colocar ternario
             $discountProd = soNumero($discountProd->plaintext);
         }


        $amePorcText = $html2->find('span.hMwkMY',0)."<br/>";
        $pos1 = strpos($amePorcText, '(');      
        $pos2 = strpos($amePorcText, '%');

        $ameReal = substr($amePorcText, $pos1+1, ($pos2-$pos1)-1);

        if ($ameReal >= $ame or $discountProd >= $discount) {
            if ($ameReal >=$ame) {
                echo "<br/><b><br/>❤️ Opa, cashback de $ameReal% ❤️<br/></b>";
            }

            if ($discountProd >= $discount) {
                echo " ? Desconto de $discountProd%  ?<br/>" ;
            }
            echo $html2->find('h1.gzujnn',0)->text.'</br>'; //mostra o produto dentro da condição master rs
            echo "<a href='$url_produto_localizado' target='_blank'>ABRIR PRODUTO</a> da pagina $i<br/><br/>";

        }
        else {
            echo " ☹️ ";
        }

        unset($html2);  //limpar memoria


    }

} 





...