Screen Scraping, Web Scraper, Screen Scraper, Data Scraping, Website Scraping é a arte de extrair informações de páginas web, de forma automágica. As possibilidades são infinitas: comparar preços, monitorar websites, importar um website, pesquisar na web, integrar dados, enfim, vai da necessidade e da criatividade.
Como você faz uma pesquisa no Google? Pressiona ctrl+k no firefox, digita o que quer e pronto? Certo. Digamos que você precise filtrar de resultados relevantes a Confeitaria apenas no Brasil, então, o Google possui a opção de pesquisa avançada, que nos permite esta pesquisa mais seletiva. Os passos para realizar esta busca seriam:
- Acessar o www.google.com.br
- Ao lado do campo de busca temos o link Pesquisa avançada
- No campo com todas as palavras faremos a nossa busca por confeitaria
- No campo Pesquisar páginas localizadas em: selecionamos o Brasil como país
- No campo de resultados, selecionamos para exibir 100 resultados por vez
É simples, certo? E para fazer isto de uma forma automágica? Já falei para vocês que Ruby é uma linguagem fantástica, Windows, Linux e MacOS, etc. Então, para realizar este trabalho, precisamos:
- é impossível fazer isto sem o Firebug, extensão do Firefox. Na realidade, é possível, mas daria mais trabalho…
- Ruby devidamente instalada, com as gems Mechanize e Nokogiri
No seu editor de texto preferido, iniciamos o script:
#!/usr/bin/env ruby require "rubygems" require "nokogiri" require "mechanize"
Definimos a nossa busca, que estará na variável query:
query = "confeitaria"Instanciamos o Mechanize, configurando seu UserAgent – para ficar com menos jeito de bot, né? – e também o nosso parser de html:
agent = WWW::Mechanize.new do |agent| agent.user_agent_alias = 'Mac Mozilla' agent.html_parser = Nokogiri::HTML end
Acessamos o Google:
page = agent.get "http://www.google.com.br/"
Agora vamos para a página de Pesquisa avançada:
adv_search_page = agent.click page.link_with :href => "/advanced_search?hl=pt-BR"
Preenchemos e enviamos o formulário:
search_page = adv_search_page.form_with :name => 'f' do |form| form.as_q = query form.field_with(:name => 'num').options.last.select form.field_with(:name => 'cr').options[31].select end.submit
É aqui que o Firebug ajuda muito e economiza tempo na hora de encotrar o nome do formulário e campos que devemos preencher, que opção devemos selecionar e por aí vai.
Em search_page já temos o resultado da pesquisa. Então vamos pegar os resultados (links), que é a parte que nos interessa:
until search_page.search('table#nav td').last.content == "" do next_page = search_page.search('table#nav td a').last.attributes['href'].to_s search_page.search('a.l').each do |link| print link.attribute('href').to_s + "\n" end sleep 10 search_page = agent.click(search_page.link_with(:href => next_page)) end
Explicando: quando você faz uma pesquisa no Google, no fim da página temos o Gooooooooooooooooooooooogle e uma seta com um link (Mais) para o próximo resultado. A diferença entre a primeira, a segunda, a enésima página e a última, é que na última não temos este link (Mais). Ou seja, vamos pesquisando até que a última coluna da tabela com id nav não tenha nada. E enquanto isto não ocorre, a próxima página é o link que temos na última coluna da tabela com id nav. E o que queremos, que são os links da pesquisa, estão nos links com classe l. Jogamos os links na tela, dormimos por 10 segundos e vamos para a próxima página.
A máxima sobre a necessidade vale por aqui. Sua criatividade é o limite e as iterações são feitas de uma forma bem simples. Qualquer dúvida, entre em contato. Até
Posts relacionados:

No comments yet
Deixe Seu Comentário