Como Criar Robôs de Busca para a Internet
31 March 2008 - 21:42 Crawler html java Programação Python Robô de Busca Search Engine Spy
Eu programo e estudo freqüentemente robôs que fazem buscas em sites da Internet. Eles nada mais são do que programas de computador capazes de fazer o download e processamento de diversas páginas em pouco tempo. Uma das pessoas que mais me ensinaram sobre este assunto é o Bruno Gola, que conheci quando trabalhamos juntos em projetos open source.
Depois de muitos testes, erros, acertos e comparações, conclui que a forma mais eficiente de criar um Robô de Busca é fazendo sua divisão em três programas principais:
1. Download de Conteúdo
Nesta parte, é criado um software capaz de baixar todas as páginas do site buscado com conteúdo que seja relevante para o que se pretende fazer.
É importante que esteja bem claro o que se deseja buscar antes de criar um Robô, pois assim você sabe exatamente quais páginas deve baixar. Depois, você deve pensar em uma maneira eficiente de baixar todas estas páginas.
A maneira que eu considero menos eficiente, porém mais simples, é realizar o download de todas as páginas do site. Para fazer isto a cada página que você faz download você deve armazenar todos os links para onde ela aponta e entrar em todos os links que têm o domínio do site. Isto é na verdade a descrição de um Crawler: ele entra em uma página, captura links, entra neles, captura mais links, entra neles, captura mais ….. até ter entrado em todos os links, aí começa tudo de novo a partir do primeiro link, buscando conteúdo novo e links novos.
2. Análise do Conteúdo
Nesta seção, deve ser criado um software capaz de processar o conteúdo das páginas previamente baixadas. Normalmente, este programa alimenta alguma estrutura de armazenamento de dados a partir de estatísticas e elementos coletados.
Esta é uma parte mais trabalhosa pois requer algoritmos eficientes tanto para processar o conteúdo baixado quanto para alimentar o banco de dados.
Uma dica importante neste item é que muitas funções que realizam processamento ou troca de informações com banco de dados são muito utilizadas para diversos sites diferentes que estão sendo buscados. Como você tem que fazer um software analisador para cada site é interessante que você crie uma biblioteca de funções mais utilizadas que será compartilhada entre eles.
3. Visualização do Conteúdo
Esta é uma parte que envolve o conhecimento prévio do usuário da aplicação. Você deve pensar para quem está coletando estes dados e qual a melhor forma de apresentá-los. A partir do momento que você tem um banco de dados bem preenchido, basta apenas pensar na interface de visualização dos dados.
Se for uma aplicação aberta para qualquer pessoa, é muito provável que a interface de visualização seja uma página na web.
Esta divisão, além de ser bem eficiente é também de fácil manutenção pois permite alta modularização de aplicações. Comento com mais detalhes cada parte em posts futuros.
Categorias: Robôs de Busca |
Gostou deste Post?
Você pode reproduzi-lo! Indique apenas o Link!
Leia Artigos Relacionados
Você pode acompanhar os comentários deste artigo através do feed RSS 2.0 Você pode deixar um comentário ou, ou interligar ("trackback") com seu site.
Assine o Feed
2 February 2009 - 18:41
naoa entendi pois oque eu estou procurando e um robo movel que pode fazer as mesmas coisas que a pessoa tipo:
assistir televisao
caminhar
beber
e ate como possivel conversar
2 February 2009 - 18:42
entao sepossivel tente mandar uma planta de um robo pra eu montar me mande uma planta pello meu msn
o meu msn e guzao1998@hotmail.com
11 February 2009 - 17:49
Poxa Gustavo, além de completamente perdido você está vendo muita ficção cientifica hein?
Então, gostaria de alguma dica de literatura, em portugues se possivel, sobre esses web bots, como criar um, etc.
Vlw
29 March 2009 - 23:50
Ola Boa Noite, Rafael qual o tipo de programação mais indicado para esta finalidade “Liguagem”…
Obrigado
23 May 2009 - 19:05
pocha,na verdade para criar um robô vocÊ precisa ter um auto grau de estudo…um bom conhecimento na verdade eu tou tentando mais preciso aprender muito++++.
23 June 2009 - 13:42
Parabens pelo texto. Claro e objetivo! Não sou programador e estou a procura de um robo que possa identificar a citação à um determinado assunto (no meu caso nanotecnologia) em sites de instituições de ensino. Tens alguma dica? Saudações, Luís
26 June 2009 - 15:57
Pro pessoal que quer se informar mais sobre a implementação desses bots, eu sugiro conhecer a linguagem de programação Python. É muito simples de aprender e bastante eficiente para esta tarefa. Sugiro que veja um pouco sobre a biblioteca urllib: http://docs.python.org/library/urllib.html
Luis Andrade, existem várias maneiras de fazer o que você precisa. Uma delas é usar a própria busca do google pelo termo “nanotecnologia” e filtrando os sites apenas para os quais você deseja obter resultados. O Google também fornece uma ferramente “Google Custom Search” que permite fazer algo nesse sentido em pouco tempo: http://code.google.com/apis/customsearch/
Abraços
30 June 2009 - 15:47
Ola Rafael,
O que vc me diz sobre sites seguros, como sites de grandes jornais. Mesmo com usuario e senhas de acesso, não consegui desenvolver nada eficaz em termos de robos. Você acha possivel? Como burlar os Robots.txt?
Abraço
30 June 2009 - 16:39
Olá Guw,
Se vc consegue acessar uma página com um navegador (ex: firefox), você consegue programar um aplicativo que acesse a página de maneira automatizada.
Acessar uma página http, nada mais é que fazer uma requisição tcp. E servidores web devem ter uma porta aberta para essas conexões (normalmente porta 80).
Que linguagem de programação vc usa?
Se for python, eu sei que é possível modificar a urllib para ela não checar o Robots.txt, você também pode modificar o seu user-agent, simulando o firefox por exemplo.
Eu já fiz isso e funcionou.
Se quiser mais ideias e ajuda é só falar.
Abraços
28 July 2009 - 12:44
Rafael,
Você tem alguma experiência com robôs que consiga funcionar em sites que colocam imagens para evitar este tipo de ação.
Abs
30 July 2009 - 20:10
Marcelo, eu tenho sim.
Há menos de 1 ano eu fiz um sistema pra buscar a base de currículos do lattes e eles tinham captcha. Era simples de “quebrar”.
Alguns são mais complicados.
Precisa de ajuda?
9 August 2009 - 1:43
Poxa, desenvolvi um robô em PHP seguindo o esquema e funciona!Só falta desenvolver mais profundamente a parte do algoritmo para avaliar as paginas.
No robô, utilizei PHP(http://php.net) com Expressões Regulares(http://aurelio.net) e consegui um robô que encontrou mais de 100 links , mais de 800 palavras e mais de 15 imagens só na página inicial do Baixaki.
Se vou publica-lo?Só se for para vencer o Google!!
Hahahahaha
observação:Tecnicamente , vencer o Google só após o Algoritmo tiver avaliando à risca cada página , com peso,quantidade de imagens,scripts,tempo de carga, links apontando e por aí vai.
25 August 2009 - 18:01
Fala Rafael, Sim estou precisando de saber de maneira geral qual o caminho que utilizou, ferramentas, etc. Estou precisando quebrar alguns robôs para ler informações de sites automaticamente.
26 August 2009 - 2:19
Pra quebrar captcha eu vejo 3 possibilidades principais:
1. Alguns sistemas de captcha são muito simples, você passa como parâmetros o desafio e a resposta dele. Então resolvendo um desafio, você consegue fazer quantas requisições quiser, resolvendo sempre o mesmo CAPTCHA.
2. Se for simples aplicar um OCR na imagem do CAPTCHA e acertar o desafio, então você consegue resolver desafios diferentes.
3. Se você não conseguir aplicar um OCR na imagem e resolver o desafio automaticamente (acontece com CAPTCHAs do Google e reCAPTCHA, por exemplo), então o melhor jeito é você criar uma interface gráfica para que um operador humano fique constantemente resolvendo desafios. Não sei quantos desafios tem que ser resolvido para o que você vai fazer, mas se forem poucos, é relativamente tranquilo usar esta estratégia.
27 August 2009 - 17:17
Fala Rafael,
Muito obrigado pelas dicas… Vou seguir suas estratégias!!
Abs
18 September 2009 - 8:35
Bom dia Rafael, estou tentando desenvolver o robô de busca para baixa paginas de um site específico, e depois organizar este conteúdo em um XML, a que questão é sempre que o usuário precisar pegar um conteúdo do site ele tem que digitar o código referente a pagina que ele precisar meu robô tem que pegar este código e baixa está pagina e organizar em um XML , minha duvidar é como eu faço para passar este código como parâmetro, o site utiliza post para pegar a pagina e eu estou desenvolvendo o sistema em Java.
21 September 2009 - 23:08
Você quer saber como envia parâmetros POST junto com a requisição de download de uma url.
A resposta está neste link:
http://www.exampledepot.com/egs/java.net/Post.html
Se fossem parâmetros GET, seria bem simples.
url = “http://www.google.com.br/search”
parametro = q ; valor = “post+url+download+java”
É só abrir a url:
url_parametroGET = “http://www.google.com.br/search?q=post+url+download+java”
27 September 2009 - 19:48
Boa Noite Rafel,
Primeiramente ótimo post, gostaria de saber se é possivel trabalhar com o php, e se vc teria um base dísponivel?
Obrigado.
27 September 2009 - 21:16
Um dos meus sócios no Amo DinDin já mexeu com esse tipo de coisa em php. Ele usava a lib CURL:
http://br2.php.net/curl
O contato dele é ivan @ amodindin . com . br
Se precisar de ajuda, fale com ele ou poste aqui.
Abraços
3 November 2009 - 10:31
Refael, muito obrigado pela informação que vc mim passo, mais ainda estou tendo problemas com este código.
Tem como vc verificar este código não estou conseguindo fazer um requisição POST, eu tenho que acessar este site: “http://www.licitacoes-e.com.br/aop/index.jsp” , e neste site tenho que digitar este código :275041 ou qualquer outro código referente a um licitação,
Mais quero fazer isto dentro da minha aplicação Java, a pessoal digita um código e o programa acessa este site http://www.licitacoes-e.com.br/aop/index.jsp e inserir o código, este site faz solicitação POST.
try {
// Construct data
String data = URLEncoder.encode(”275041″, “UTF-8″);// + “=” + URLEncoder.encode(”", “UTF-8″);
//data += “&” + URLEncoder.encode(”key2″, “UTF-8″) + “=” + URLEncoder.encode(”value2″, “UTF-8″);
// Send data
URL url = new URL(”http://hostname:80/cgi”);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
// Process line…
}
wr.close();
rd.close();
} catch (Exception e) {
}
4 November 2009 - 8:52
Refael, muito obrigado pela informação que vc mim passo, mais ainda estou tendo problemas com este código.
Rafael tem como vc verificar este código não estou conseguindo fazer um requisição POST, eu tenho que acessar este site: “http://www.licitacoes-e.com.br/aop/index.jsp” , e neste site tenho que digitar este código :275041 ou qualquer outro código referente a um licitação,
Mais quero fazer isto dentro da minha aplicação Java, a pessoal digita um código e o programa acessa este site http://www.licitacoes-e.com.br/aop/index.jsp e inserir o código, este site faz solicitação POST.
4 November 2009 - 8:57
try {
// Construct data
String data = URLEncoder.encode(”numeroLicitacao”,”UTF-8″) + “=” + URLEncoder.encode(”273315″, “UTF-8″);
//data += “&” + URLEncoder.encode(”", “UTF-8″) + “=” + URLEncoder.encode(”5151″, “UTF-8″);
// Send data
URL url = new URL(”http://www.licitacoes-e.com.br/aop/index.jsp”);
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
wr.write(data);
wr.flush();
// Get the response
BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = rd.readLine()) != null) {
// Process line…
System.out.println(line);
}
wr.close();
rd.close();
} catch (Exception e) {
}
}
}
17 January 2010 - 2:23
Que viagem do Gustavo, será que ele leu sobre qual robô que o autor está falando ?
27 January 2010 - 16:45
Rafael o que vc quer dizer com resolver desafio em relação aos captchas?
31 January 2010 - 22:52
Arthur,
Definição de Captcha pela Wikipedia:
“Teste de desafio cognitivo, utilizado como ferramenta anti-spam…”
http://pt.wikipedia.org/wiki/CAPTCHA
Quando digo resolver desafio, quero dizer resolver o captcha, ou seja, encontrar a solução que satisfaz o captcha.
9 February 2010 - 9:09
Bom dia Rafael, parabens pelo post e pelos comentarios acima. Estou iniciando um projeto aki no meu servico para desenvolver um robo que acesse e insira dados em uma pagina de intranet, a pag foi desenvolvida em JSP e eu nao tenho acesso nenhum ao servidor, ou seja, a aplicacao deve ser desenvolvida como se um usuario estivesse usando um brouser para a tarefa. Por favor, me de algumas dicas do que comecar a estudar, muito obrigada.
9 February 2010 - 21:53
Patricia, a maneira mais simples de fazer o que você precisa (simular um browser) é usando o Selenium-RC:
http://seleniumhq.org/projects/remote-control/
Pra usá-lo, você sobe um servidor do selenium na sua máquina. E escreve um programa que usa um cliente do selenium-rc que envia comandos pra esse servidor. Então o servidor abre um browser do seu computador e envia os comandos pra ele. É bem tranquilo de usar!
Se você quiser simular um browser, mas sem abrir o browser, então você tem que usar alguma biblioteca que faça requisições http. Se você me disser qual linguagem de programação pretende usar, eu posso recomendar uma biblioteca e documentação mais específicas.
Se não tiver restrição quanto a linguagem de programação, eu recomendo que você use Ruby. Tem uma “biblioteca” muito boa pra Ruby, é a Nokogiri. Pra conhecer mais, veja o vídeo do link abaixo (mostra como simular browser):
http://railscasts.com/episodes/190-screen-scraping-with-nokogiri
18 February 2010 - 11:21
Rafael, minha intencao eh simular o browser, mas sem abri-lo, de maneira que a aplicacao acesse o site, capture dados, e os salve em um bd. Quero trabalhar com java e mysql, por ja ter alguma experiencia, ainda que pouca. E desde ja agradeco a ajuda, bjuss!!!
18 February 2010 - 21:06
Patrícia,
Em Java existe uma classe chamada URL. Ela permite que você acesso o conteúdo de páginas da Internet.
Tem um exemplo de uso aqui: http://bit.ly/adZTvM
Se a aplicação for um pouco mais complexa, eu não recomendo o uso de Java. É uma linguagem com sintaxe muito ruim e eu acho péssima para fazer E/S (entrada e saída de dados). Também acho muito ruim para manipular strings.
Eu gosto de duas linguagens de programação para fazer isso que você precisa: Python e Ruby. Tenho usado mais Ruby ultimamente porque possui pacotes muito bons, como o nokogiri que eu postei anteriormente.
Me manda e-mail barbolo @ gmail . com se precisar de ajuda com Java. Eu tenho alguns exemplos de programas que já fiz com essa sua finalidade, talvez ajudem.
22 February 2010 - 17:26
Rafael, tambem estou tentando fazer algo parecido com o que a Patricia quer, vi o video do link acima e é justamente o que preciso. Vc sabe de alguma apostila/tutorial que me ensine a trabalhar com essa biblioteca Nokogiri? pesquisa simples, como as do video, eu consegui, mas nao sei, por exemplo, como logar em um site para posteriomente salvar as informacoes.
23 February 2010 - 20:21
A patrícia também está com o problema de autenticação em um site.
Eu vou tentar fazer o mais breve possível um post sobre isso e postar no http://www.bitabit.eng.br/
Só preciso pegar um site que precisa de autenticação e que não vai mudar muito ao longo do tempo. Aí já posto um exemplo mais completo.
24 February 2010 - 9:27
Olá,
Gostaria de saber se existe algum tutorial para criação de uma robô de busca, havendo poderia disponibiliza-lo ?
Desde já grato.
6 March 2010 - 12:06
Boa niote
Gostaria de saber se é posivel vazer um site de busca com as carateristicas do cade ou google pois tenho o dominio http://www.abcbusca.com.br e gostaria te colocar no ar para comesar a ser conhecido, comesando pequeno e ver o que vai dar!!!
deste ja meu muito obrigado
Cesar morais
Cesaracm001@hotmail.com
49-9975-2664
8 March 2010 - 10:58
Caro Rafael, preciso de um robô de busca específico e gostaria de saber se você desenvolve para terceiros. Favor entrar em contato diretamente por meu e-mail.
19 March 2010 - 23:01
Cesar,
É possível fazer isso que você quer, mas não entendo por que você faria isso. Dificilmente seu site vai ficar conhecido só porque tem um bom domínio. Meu conselho pra você é deixar seu domínio “parked”.
Antonio, no momento não estou com tempo para fazer esse trabalho. Mas entre em contato no meu email (rafael @ barbolo.com.br) e me diga o que você precisa que de repente eu posso ajudá-lo de alguma maneira.
21 April 2010 - 22:05
Tenho interesse em converssar com vc sobre negócios. Estou desenvolvendo um site e gostaria de contar com os seus conhecimentos em criar robôs.
Se tiver ineteresse mande-me um email e vamos converssar.
Abs
Angel
21 May 2010 - 10:30
Gostaria de entrar em contato com vc para lhe apresentar um plano de negocios. Como posso entrar em contato. Caso nao seja de seu interesse, vc me indicaria alguma pessoa ou empresa para criar robos ?
Obrigado.
23 June 2010 - 9:13
Claro!
Entre em contato comigo que eu ajudo, faço ou passo para alguém que faça o que você precisa.
rafael@barbolo.com.br
Abraços