Last active
April 23, 2017 02:25
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require_relative 'cne_parser' | |
if ARGV.size>0 | |
data = CneService::find(ARGV[0]) | |
puts data.inspect | |
else | |
puts "Uso: #{$0} cedula" | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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