Pergunta

Eu estou tentando criar um simples alerta app para alguns amigos.

Basicamente, eu quero ser capaz de extrair dados de "preço" e "disponibilidade de stock" de uma página da web como a seguir dois:

Eu fiz o alerta via e-mail e sms parte mas agora eu quero ser capaz de obter a quantidade e o preço de páginas web (aqueles 2 ou quaisquer outras) para que eu possa comparar o preço e a quantidade disponível e alerta-nos para fazer um pedido, se um produto é entre alguns limites.

Eu tentei alguns regex (encontrada em alguns tutoriais, mas eu de uma maneira muito n00b para isso), mas ainda não consegui chegar a este trabalho, qualquer boas dicas ou exemplos?

Foi útil?

Solução

$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";

Outras dicas

É chamado de raspagem de tela, caso você precise pesquisar no Google.

Eu sugeriria que você use um analisador DOM e XPath. Alimente o HTML através do htmltidy primeiro, para garantir que seja uma marcação válida.

Por exemplo:

$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";
}

O que quer que você faça: não use expressões regulares para analisar html ou Coisas ruins vão acontecer. Use um analisador em vez de.

1º, fazer essa pergunta também entra em detalhes. 2º, extrair dados de um site pode não ser legítimo. No entanto, eu tenho dicas:

  1. Use o inspetor Firebug ou Chrome/Safari para explorar o conteúdo HTML e o padrão de informações interessantes

  2. Teste seu regex para ver se a correspondência. Você pode precisar fazer isso muitas vezes (análise/extração de várias passagens)

  3. Escreva um cliente via curl ou ainda mais simples, use file_get_contents (observe que alguns hospedagem desativam URLs de carregamento com file_get_contents)

Para mim, é melhor usar o Tidy para converter em xhtml válido e depois usar o XPath para extrair dados, em vez de regex. Por quê? Porque o XHTML não é regular e o XPath é muito flexível. Você pode aprender o XSLT a transformar.

Boa sorte!

Você está provavelmente melhor fora de carregar o código HTML em um analisador de DOM como este e pesquisa para a "precificação" da tabela.No entanto, qualquer tipo de raspagem você pode quebrar sempre que alterar o seu layout de página, e é provavelmente ilegal, sem o seu consentimento.

A melhor maneira, porém, seria falar para as pessoas que administram o site, e ver se eles têm alternativa, mais confiável formas de entrega de dados (Web services, RSS, ou exportações de banco de dados vêm à mente).

O método mais simples para extrair dados do site. Analisei que meus dados estão cobertos apenas dentro da tag, então preparei este.

<?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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top