如何为网络爬虫优化此代码?

时间:2019-04-26 02:12:43

标签: php web-scraping web-crawler domparser domcrawler

我正在练习网络爬虫,我需要优化此代码,我是一个初学者,我编写了此代码,我觉得它很慢,如何优化它? 简而言之,我想获得此电子商务的页面,并过滤将要定义的折扣和现金返还。 请给我建议。 感激!

已经尝试作为库 simpledomparser guzzle和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


    }

} 





0 个答案:

没有答案