Curl Parsear un html

Prospero Seguir

Eta
Verificación en dos pasos desactivada
Desde
19 Nov 2006
Mensajes
1.266
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!!
 

Gordon Olson

Beta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 Oct 2019
Mensajes
34
Saludos, no te sirve SIMPLE HTML DOM? Es mucho mas simple
 

Dieguit0sk8

Delta
Verificación en dos pasos desactivada
Verificado por Whatsapp
Desde
6 Jul 2012
Mensajes
558
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:

jmdoren

Épsilon
Verificación en dos pasos desactivada
Verificado por Whatsapp
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
31 May 2016
Mensajes
789
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/
 

Dieguit0sk8

Delta
Verificación en dos pasos desactivada
Verificado por Whatsapp
Desde
6 Jul 2012
Mensajes
558
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];

?>
 

Prospero

Eta
Verificación en dos pasos desactivada
Desde
19 Nov 2006
Mensajes
1.266
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.
 

Gordon Olson

Beta
Verificación en dos pasos desactivada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 Oct 2019
Mensajes
34
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?
 

¡Regístrate y comienza a ganar!

Beneficios

  • Gana dinero por participar
  • Gana dinero por recomendarnos
  • Descubre ofertas de empleo diariamente
  • Negocios seguros
  • ¡Información premium y más!

Acceder

¿Ya tienes una cuenta? Accede aquí

Arriba