Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alexandre Queiróz

Web crawler em PHP - é possível?

Recommended Posts

Pessoal,

 

Um cliente meu quer que eu construa um Web crawler em PHP, nunca fiz trabalho parecido e não tenho idéia por onde começar e nem como isso funcionaria.

Basicamente o script buscaria informações em outros sites e alimentaria o banco de dados, ele teria que buscar as informações direto no HTML das páginas. Ele também deverá funcionar em horários pré-estabelecidos (cron job).

Como já disse nunca fiz um trabalho desses e não sei por onde começar.

 

Pergunta: Alguém tem alguma indicação sobre o assunto?

 

Obrigado! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

 

Alexandre.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... Web crawler você teria que recuperar o HTML das páginas, buscar todos os links, jogar em uma pilha de endereços, e ae fazer uma busca pelo que quer dentro da pagina HTML, finalizado, pega o proximo endereço da pilha e executa o mesmo processo. O problema é o TimeOut que o PHP tem... voce não consegue ficar executando por muito tempo, e essa aplicação é necessáriamente de execução looonga... por isso eu acredito que seja melhor fazer em uma outra linguagem

não faço a menor ideia de como fazer isso espero que alguem te ajudeabraço

Cara... Esse fórum ta complicado... olha as respostas que colocam!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alexandre, até hoje, nunca pensei em desenvolver um crawler, mas a lógica do colega ZehFirino parece correta. :)

Para contornar o problema de limite de execução, veja a função set_time_limit().

 

Expressões regulares certamente farão o trabalho para extrair os links do código. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara... Web crawler você teria que recuperar o HTML das páginas, buscar todos os links, jogar em uma pilha de endereços, e ae fazer uma busca pelo que quer dentro da pagina HTML, finalizado, pega o proximo endereço da pilha e executa o mesmo processo. O problema é o TimeOut que o PHP tem... voce não consegue ficar executando por muito tempo, e essa aplicação é necessáriamente de execução looonga... por isso eu acredito que seja melhor fazer em uma outra linguagem

não faço a menor ideia de como fazer isso espero que alguem te ajudeabraço

Cara... Esse fórum ta complicado... olha as respostas que colocam!
gostaria de deixar claro que escrevi isso para o topico ir para cima, pois acho muito interessante isso que o colega quere outra no forum se o seu post passar a primeira pagina você não obtem respostaisso sim é uma pena!abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

É perfeitamente possível e até bastante fácil.

 

O problema do tempo é bastante fácil de contornar:

 

ini_set("max_execution_time", -1);

 

Entretanto irás te deparar com um problema ao nível da memória, por isso convem também inserires o comando abaixo:

 

ini_set("memory_limit", -1);

 

Quanto ao webcrawler em si consegues isso bem com esta função:

 

function obter_links($url){

if (!file_get_contents($url)){ return;}

 

$conteudo = file_get_contents($url);

$tratado = strip_tags($conteudo, "<a>");

preg_match_all("/<a(?:[^>]*)href=\"([^\"]*)\"(?:[^>]*)>(?:[^<]*)<\/a>/is", $tratado, $resultados);

 

return $resultados[1];

}

 

Isto vai devolver todos os links no site alvo, depois é só fazer um while para ires seguindo todos os links e tens o crawler a funcionar.

 

Abraço

Rui Torre

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, o problema não é tão complicado não, olhá só:

 

Sobre o problema de timeout, tudo bem, as soluções acima funcionariam, mas não é exatamente a forma mais tranquila para o servidor trabalhar.. Você pode fazer o processo faseado.

 

Imaginando que você tenha uma fila com 10 domínios para varrer, coloque-os em um banco de dados e então mande o sistema pegar o primeiro.

 

Pegando o primeiro, tente acessar o SITEMAP do site e pegar seus links.

 

Obtendo os links, use o file_get_contents para pegar o conteúdo, utilizando o strip_tags para pegar apenas textos e não TAGS.

 

Ao final do processo apague esse item varrido do banco e atualize a página.

 

A lógica parece funcionar, mas o seu problema será conseguir os domínios..

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.