Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save ThawanFidelis/1767015 to your computer and use it in GitHub Desktop.
Save ThawanFidelis/1767015 to your computer and use it in GitHub Desktop.
Script feito para extrair dados do site do cnpq. aproveitando a tarefa para praticar Regex =D
#encoding: utf-8
require 'capybara'
require 'nokogiri'
class Area_conhecimento
def initialize(titulo, numero)
@titulo, @numero = titulo, numero
end
attr_reader :titulo, :numero
end
class Grande_area
def initialize(titulo, areas = [])
@titulo, @areas = titulo, areas
end
attr_reader :titulo
def incluir(area_de_conhecimento)
@areas << area_de_conhecimento
end
def areas
@areas.each{|area| [area.titulo, area.numero]}
end
end
@session = Capybara::Session.new(:selenium)
arquivo = File.new("foo","w")
(1..9).each do |grande_area|
@session.visit("http://www.cnpq.br/areasconhecimento/#{grande_area}.htm")
lista = Nokogiri::HTML(@session.html)
elementos = lista.to_str.gsub!(/\n +/," ")
titulo_da_grande_area = elementos.match("(?<= Conhecimento).+(?= Número)")
nova_grande_area = Grande_area.new(titulo_da_grande_area)
if elementos.match(/([0-9]\.[0-9]{2}\.[0-9]{2}\.[0-9]{2}-[0-9])/).nil?
codigo = elementos.scan(/[0-9]{8}/)
nova_grande_area.incluir( Area_conhecimento.new(elementos.scan(/(?<=[0-9]{8})[^0-9]* \b/), codigo))
else
codigo = elementos.scan(/([0-9]\.[0-9]{2}\.[0-9]{2}\.[0-9]{2}-[0-9])/)
nova_grande_area.incluir(Area_conhecimento.new(elementos.scan(/(?<=-[0-9])[^0-9]* \b/), codigo))
end
arquivo.write(nova_grande_area.titulo)
arquivo.write("\n")
arquivo.write(nova_grande_area.areas)
arquivo.write("\n")
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment