Curl Parsear un html

Prospero

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

Dieguit0sk8

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

Delta
Verificación en dos pasos desactivada
Verificado por Whatsapp
Desde
31 May 2016
Mensajes
533
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

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

Dseda
Verificación en dos pasos desactivada
Desde
19 Nov 2006
Mensajes
1.055
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
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?
 

Arriba