Curl Parsear un html

  • Autor Autor Prospero
  • Fecha de inicio Fecha de inicio
Prospero

Prospero

Eta
Verificación en dos pasos activada
Hola amigos, estoy trantando de parsear otra web en este caso Mercadolibre para traer solo la cantidad de vendidos y no logro llegar. Algun compadre que pueda explicar como llegar o donde leer como llegar?

PHP:
<?php

function price(){
    $url = 'https://articulo.mercadolibre.com.ar/MLA-648903966-pulsera-hombre-mujer-de-soga-dije-acero-quirurgico-modelo-ancla-nautica-brazalete-hombre-pulsera-ancla-_JM';
    $ch = curl_init();
   
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HTTPHEADER,array("Accept-Lenguage: es-es,es"));
    curl_setopt($ch, CURLOPT_TIMEOUT, 10);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

    $html = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);

    preg_match_all('|<div class="item-conditions">(.*)</div>|', $html, $result);

    return $result;
   
   
   
}

price();


?>

Sabiendo que el Div con class "item-conditions tiene el dato.

HTML:
<div class="item-conditions">
           
                Nuevo
           
           
               
                    &nbsp;-&nbsp;
               
                1801
                vendidos
           
        </div>

gracias!! los leo!!
 
Saludos, no te sirve SIMPLE HTML DOM? Es mucho mas simple
 
Pero estas imprimiendo los datos?

print_r(price());
 
Hola!!! genio!! me imprime el array sin datos.

Array ( [0] => Array ( ) [1] => Array ( ) )

Prueba con esto
PHP:
preg_match_all('|<div class="item-conditions">(.*)</div>|sU', $html, $result);
 
Esta la solucion que logre hacer, no se si esta perfecta pero funciona.
PHP:
<?php
function cURL($url, $posts, $cookies, $referer, $proxy){
    $headers = array (
        'Accept-Language: en-US;q=0.6,en;q=0.4',
    );
    $tiempo = time();
    $agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; es-MX; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
    curl_setopt($ch, CURLOPT_TIMEOUT, 2);
    if($proxy){
        if(stristr($proxy, '@')){
            $datosproxy = explode('@', $proxy);
            curl_setopt($ch, CURLOPT_PROXY, $datosproxy[1]);
            curl_setopt($ch, CURLOPT_PROXYUSERPWD, $datosproxy[0]);
            //echo $datosproxy[0];
        }else{
            curl_setopt($ch, CURLOPT_PROXY, $proxy);
        }
    }
    if($posts){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $posts);
    }
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $page = curl_exec($ch);
    curl_close($ch);

    if($page){
        return $page;
    }
    return 'curl '.$url.'';
}
$url = 'https://articulo.mercadolibre.com.ar/MLA-648903966-pulsera-hombre-mujer-de-soga-dije-acero-quirurgico-modelo-ancla-nautica-brazalete-hombre-pulsera-ancla-_JM';
$data = cURL($url,'','mercadolibre.txt',$url,'');
preg_match('|<div class="item-conditions">(.*?)</div>|is',$data,$result);
$text = preg_replace('/\s\s+/', ' ',$result[1]);
$esto = array('/ (.*?) &nbsp;-&nbsp; (.*?) (.*?) /is');
// $estado = preg_replace($esto, array('$1'), $text);
$cantidad = preg_replace($esto, array('$2'), $text);
echo $cantidad;

?>

Resultado
Insertar CODE, HTML o PHP:
1801

Saludos, si necesitas hacer un scraper mas avanzado me hablas por mp
 
Última edición:
hay una línea ( 7012 en este caso ) que en parte dice:
availableStock":1956,"soldStock":1801,

tal vez te es más fácil ubicar esa línea y sacar todos los valores de ahí

el problema con eso es que pueden cambiar el html en cualquier minuto y tu programa va a fallar

¿has probado usando la API de MercadoLibre? https://developers.mercadolibre.com/
 
hay una línea ( 7012 en este caso ) que en parte dice:
availableStock":1956,"soldStock":1801,

tal vez te es más fácil ubicar esa línea y sacar todos los valores de ahí

el problema con eso es que pueden cambiar el html en cualquier minuto y tu programa va a fallar

¿has probado usando la API de MercadoLibre? https://developers.mercadolibre.com/
Solucion usando soldStock
PHP:
<?php
function cURL($url, $posts, $cookies, $referer, $proxy){
    $headers = array (
        'Accept-Language: en-US;q=0.6,en;q=0.4',
    );
    $tiempo = time();
    $agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; es-MX; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13";
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_USERAGENT, $agent);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
    curl_setopt($ch, CURLOPT_TIMEOUT, 2);
    if($proxy){
        if(stristr($proxy, '@')){
            $datosproxy = explode('@', $proxy);
            curl_setopt($ch, CURLOPT_PROXY, $datosproxy[1]);
            curl_setopt($ch, CURLOPT_PROXYUSERPWD, $datosproxy[0]);
            //echo $datosproxy[0];
        }else{
            curl_setopt($ch, CURLOPT_PROXY, $proxy);
        }
    }
    if($posts){
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $posts);
    }
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $page = curl_exec($ch);
    curl_close($ch);

    if($page){
        return $page;
    }
    return 'curl '.$url.'';
}
$url = 'https://articulo.mercadolibre.com.ar/MLA-648903966-pulsera-hombre-mujer-de-soga-dije-acero-quirurgico-modelo-ancla-nautica-brazalete-hombre-pulsera-ancla-_JM';
$data = cURL($url,'','mercadolibre.txt',$url,'');
preg_match('|"soldStock":(.*?),|is',$data,$result);
echo $result[1];

?>
 
hay una línea ( 7012 en este caso ) que en parte dice:
availableStock":1956,"soldStock":1801,

tal vez te es más fácil ubicar esa línea y sacar todos los valores de ahí

el problema con eso es que pueden cambiar el html en cualquier minuto y tu programa va a fallar

¿has probado usando la API de MercadoLibre? https://developers.mercadolibre.com/

las api no devuelven el la cantidad de ventas del producto.
 
Se puede saber cual recomiendan? Porque yo uso SIMPLE HTML DOM, para scrapper simple de un web, como por ejemplo día y fecha de algunos eventos, pero cual es la diferencia con CURL?
 

Temas similares

Prospero
Respuestas
4
Visitas
239
YeltsinReyes
YeltsinReyes
Atrás
Arriba