Skip to content

Instantly share code, notes, and snippets.

@wyanez
Last active April 23, 2017 02:25
Show Gist options
  • Save wyanez/9b722790a391e2e6bee03d656ade33c7 to your computer and use it in GitHub Desktop.
Save wyanez/9b722790a391e2e6bee03d656ade33c7 to your computer and use it in GitHub Desktop.
Pequeña utilidad de scrapping para obtener los datos de un votante dada su cedula desde la web del CNE
require_relative 'cne_parser'
if ARGV.size>0
data = CneService::find(ARGV[0])
puts data.inspect
else
puts "Uso: #{$0} cedula"
end
require 'nokogiri'
require 'net/http'
class CneService
def self.find(cedula, nacionalidad='V')
data = {}
#puts "Buscando #{cedula}"
Net::HTTP.start('www.cne.gob.ve') do |query|
resp=query.get("/web/registro_electoral/ce.php?nacionalidad=#{nacionalidad}&cedula=#{cedula}")
if resp.code=='200'
html = resp.body
doc = Nokogiri::HTML.parse(html)
pos_estatus = html.index('ESTATUS')
if pos_estatus.nil?
tabla = doc.xpath("//table[@width='530']").first
fields = [:cedula,:nombre,:estado,:municipio,:parroquia,:centro,:direccion,:mesa]
i = 0
#tabla.xpath("./tbody/tr").each do |tr|
tabla.children.each do |tr|
#puts tr.children[1].content unless tr.children[1].nil?
#puts tr.children[3].content unless tr.children[3].nil?
data[fields[i]] = tr.children[3].content unless tr.children[3].nil?
#puts data[fields[i]]
i += 1
end
data[:estatus]=true
else # hay un problema con esa cedula
tabla = doc.xpath("//td[@colspan='2']/table[@align='center']").first
fields = [:cedula,:nombre1,:nombre2,:apellido1,:apellido2]
i = 0
#tabla.xpath("./tbody/tr").each do |tr|
data_aux={}
tabla.children.each do |tr|
unless tr.nil?
0.upto(tr.children.size-1) do |x|
cont = tr.children[x].content
pos_2pts = cont.index(':')
unless pos_2pts.nil?
data_aux[fields[i]] = cont[pos_2pts+1..cont.size].strip
#puts data[fields[i]]
i += 1
end
end
end
end
tabla = doc.xpath("//td[@colspan='2']/table[@align='right']").first
if data_aux[:cedula].nil?
data[:cedula] = cedula
else
data[:cedula] = data_aux[:cedula]
end
nombre=""
if data_aux.size>0
nombre = data_aux[:nombre1] unless data_aux[:nombre1].empty?
nombre << " "+ data_aux[:nombre2] unless data_aux[:nombre2].empty?
nombre << " "+ data_aux[:apellido1] unless data_aux[:apellido1].empty?
nombre << " "+ data_aux[:apellido2] unless data_aux[:apellido2].empty?
end
data[:nombre] = nombre
data[:estatus]=false
data[:mensaje] = tabla.xpath("./tr/td").first.content unless tabla.nil?
end
else
puts "Error de conexion. status #{resp.code} mensaje: #{resp.message}"
end
end
return data
end
end
#if ARGV.size>0
# data = CneService::find(ARGV[0])
# puts data.inspect
#end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment