Pregunta

Estoy tratando de crear una aplicación simple alerta para algunos amigos.

Básicamente quiero ser capaz de extraer datos "precio" y "disponibilidad de existencias" de una página web como el folowing dos:

He hecho la alerta por correo electrónico y parte sms pero ahora yo quiero ser capaz de obtener la cantidad y el precio de las páginas (los 2 o cualquier otro unos) de modo que pueda comparar el precio y la cantidad disponible y nos alertará para hacer un pedido si un producto es de entre unos umbrales.

He probado algunas expresiones regulares (que se encuentra en algunos tutoriales, pero una manera demasiado n00b para esto), pero no han logrado conseguir este trabajo, los buenos consejos o ejemplos?

¿Fue útil?

Solución

$content = file_get_contents('http://www.sparkfun.com/commerce/product_info.php?products_id=9279');

preg_match('#<tr><th>(.*)</th> <td><b>price</b></td></tr>#', $content, $match);
$price = $match[1];

preg_match('#<input type="hidden" name="quantity_on_hand" value="(.*?)">#', $content, $match);
$in_stock = $match[1];

echo "Price: $price - Availability: $in_stock\n";

Otros consejos

Se llama captura de imágenes, en caso de que necesite de google para ello.

Yo sugeriría que utilice un analizador DOM y expresiones XPath en su lugar. Alimentar el código HTML a través HtmlTidy primer lugar, para asegurarse de que es marcado válido.

Por ejemplo:

$html = file_get_contents("http://www.example.com");
$html = tidy_repair_string($html);
$doc = new DomDocument();
$doc->loadHtml($html);
$xpath = new DomXPath($doc);
// Now query the document:
foreach ($xpath->query('//table[@class="pricing"]/th') as $node) {
  echo $node, "\n";
}

Cualquier cosa que hagas: No utilizar expresiones regulares para analizar HTML o ocurrirán cosas malas . Utilizar un analizador lugar.

primero, esta pregunta va demasiado en detalles. Segundo, la extracción de datos de un sitio web puede que no sea legítimo. Sin embargo, no tengo consejos:

  1. El uso de Firebug o Chrome / Safari Inspector para explorar el contenido HTML y el patrón de información interesante

  2. Pruebe sus expresiones regulares para ver si el partido. Es posible que necesite hacer muchas veces (multi-pass de análisis / extracción)

  3. Escribir un cliente a través de dobleces o incluso mucho más simple, usar file_get_contents (Tenga en cuenta que algunos de alojamiento desactivar URL de carga con file_get_contents)

Para mí, será mejor utilizar Tidy para convertir a XHTML y luego utilizar XPath para extraer los datos, en lugar de expresiones regulares. ¿Por qué? Debido a XHTML no es regular y XPath es muy flexible. Usted puede aprender XSLT para transformar.

Buena suerte!

Usted es probablemente mejor fuera de cargar el código HTML en un analizador DOM como éste y la búsqueda de la tabla de "fijación de precios". Sin embargo, cualquier tipo de raspado que haces puede romper cada vez que cambian su diseño de página, y es probablemente ilegal sin su consentimiento.

La mejor manera, sin embargo, sería la de hablar con la gente que maneja el sitio, y ver si han alternativa, las formas más fiables de entrega de datos (servicios web, RSS, o exportación de bases de datos vienen a la mente).

El método más simple para extraer datos desde el sitio Web. He analizado que mis todos los datos están cubiertos dentro de la etiqueta única, por lo que he preparado éste.

<?php
    include(‘simple_html_dom.php’);
        // Create DOM from URL, paste your destined web url in $page 
        $page = ‘http://facebook4free.com/category/facebookstatus/amazing-facebook-status/’;
        $html = new simple_html_dom();

       //Within $html your webpage will be loaded for further operation
        $html->load_file($page);

        // Find all links
        $links = array();
        //Within find() function, I have written h3 so it will simply fetch the content from <h3> tag only. Change as per your requirement.
       foreach($html->find(‘h3′) as $element) 
        {
            $links[] = $element;
        }
        reset($links);
        //$out will be having each of HTML element content you searching for, within that web page
        foreach ($links as $out) 
        {
            echo $out;
        }                

?>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top