Automatizar processos é algo do dia-a-dia do programador, não só se tratando do produto principal de uma empresa ou de um sistema, mas também atividades repetitivas e cansativas.
O Problema
Imagine que um cliente tenha um e-commerce, mas que não esteja satisfeito com o sistema atual e peça para sua empresa um e-commerce melhor e que atenda melhor as suas necessidades. Tudo vai muito bem enquanto você desenvolve o sistema novo, usando as tecnologias mais atuais. De repente o cliente entra em contato e surge uma nova tarefa. Você vai ter que migrar seus produtos, mas por algum motivo o cliente não tem como te repassar as imagens diretamente, e nem a associação correta com os produtos. Como realizar essa tarefa? Ir de página em página no sistema antigo e baixar imagem por imagem é muito cansativo, trabalhoso, e não parece ser uma boa ideia. É aí que entra uma das utilidades de um web crawler.
A solução
Um web crawler é um script com o objetivo de “rastejar” ou “passear” por páginas web, com muitas funcionalidades, como indexar páginas novas (Google), salvar imagens, salvar arquivos, ou simplesmente fazer raspagem de dados (Web scrapping).
Existem muitas maneiras de se criar um crawler utilizando bibliotecas prontas disponíveis. Alguns exemplos são o framework Scrapy, feito em Python, o crawler4j em Java, e o Mechanize e Watir, que são bibliotecas Ruby.
Apresentando o Mechanize
Em uma certa ocasião, para auxiliar na migração de dados do cliente, já precisei utilizar um web crawler. Um sistema antigo contava com diversos arquivos pdf. Dado que existiam inúmeros cursos e que precisaria baixar todos os arquivos de cada curso, automatizei este processo utilizando o Mechanize.
O mechanize está disponível como uma gem, então para baixa-lo basta executar o seguinte comando:
gem install mechanize
Após isto, em um arquivo ruby ou diretamente pelo interpretador, é preciso incluir as classes da biblioteca
require 'mechanize'
Feito isto, você pode instanciar um objeto da classe Mechanize, e em seguida passar uma URL.
O código abaixo cria um objeto page
, e roda um loop exibindo todos atributos href dos links da página.
agent = Mechanize.new agent.get("http://www.algumaurlqualquer.com") do |page| page.links.each do |link| puts link.href end end
Existem outros métodos para o objeto page
, para mostrar ou capturar as imagens, capturar elementos DOM ou até mesmo preencher formulários.
O Mechanize porém tem algumas desvantagens. Se por exemplo for necessário se utilizar de JavaScript para chegar a certas páginas, o Mechanize vai falhar, pois o script é executado sem o navegador.
Nos próximos capítulos…
Este foi um simples exemplo. Se estiver mais curioso de como se utilizar da biblioteca para automatizar tarefas, a melhor maneira de aprender, jovem Padawan, é sujando as mãos com código, então mãos à obra!
Nos próximos posts apresentarei novas bibliotecas. Fique antenado!
algum tutorial que ensine a motar um webcrawler em portugues?
Olá Fabiano,
pelo que andei pesquisando por aí, em relação a biblioteca que citei no post tem pouco material em português, mas posso te indicar alguns links legais com trechos de códigos e explicações que podem ajudar na hora de escrever um, porém são em inglês…
Seguem eles:
http://mechanize.rubyforge.org/GUIDE_rdoc.html
http://ruby.bastardsbook.com/chapters/mechanize/
Pingback: gestational diabetes casserole recipes
Tem um setor dentro da minha empresa de buscas que eu gostaria de automatizar, pois o dia a dia é bastante repetitivo e cansativo. Hoje trabalhamos com control c +Google. Teria alguma sugestão de quem forneça esse tipo de serviço ?
Muito obrigado.
Qual seria o tipo de problema que queria automatizar ? posso ajudá-lo talvez
Olá!
é possível criar um robo que logue em um site, e baixe um relatório?
Ou seja ele precisa acessar um site todos os dias, clicar em 2 ou 3 ações dentro do site.
O site que me refiro é o Hubspot e o relatório é o relatório de clientes.
Olá! Você conseguiu solução? Estou com a mesma dúvida!