Más Hpricot para el Buscaboe

Hoy me ha extrañado que el BuscaBoe, nuestro buscador de subvenciones, llevase varios dí­as que no encontraba nada. Ya me pareció raro cuando lo ví­ el sábado, pero pensé que igual era por el fin de semana, que no habí­an publicado nada relativo a ayudas o subvenciones, y como todaví­a andaba con la resaca post-conferencia, pues no le dí­ mucha imprtancia.

Hoy he mirado la página del BOE para comprobarlo y resulta que han cambiado la estructura del html de la página del sumario, que es la que usa el BuscaBoe para buscar. La verdad es que ahora está mejor estructurada que antes, aunque todaví­a no acabe de estar bien.

Aprovechando que tení­a que cambiar el patrón de búsqueda he decidido hacerlo con hpricot, que viene al pelo para estas cosas (antes usaba una expresión regular).

El meollo de la cuestión queda así­ con la nueva estructura:

def buscar(fecha)
  fecha_s = fecha.strftime("%Y/%m/%d")
  url = "http://boe.es/g/es/boe/dias/#{fecha_s}/sumario.php"
 
  boe = Hpricot(Iconv.iconv("UTF-8", "ISO-8859-1", open(url).read).join)
 
  dispos = boe.search("//li[@class='dispo']")
 
  n = boe.search("//p[@class='titSolapas']").first
  n.search("/abbr").remove
  n1 = n.inner_html
  numero = n1.scan(/( )(.*)(])/i).first[1]

  dispos.each_with_index do |d, i|

    enlace = d.search("//li[@class='puntoHTML']/a").first["href"]
    enlace.gsub!("../../../../../", "http://boe.es/g/es/")
   
    d.search("//div[@class='enlacesDoc']").remove
    texto = d.inner_html.chomp
     
    if texto.include?("ayuda ") || texto.include?("ayudas") || texto.include?("subvenci")
      doc = Hpricot(open(enlace))
      sumario = doc.search("//div[@class='BoeSumarioBD']")
      seccion = sumario.at("h1").inner_html
      subseccion = sumario.at("h2").inner_html
   
      if !Entrada.find_by_enlace(enlace)  
        Entrada.create(:fecha => fecha, :numero_boe => numero, :texto => texto, :enlace => enlace, :seccion => seccion, :subseccion => subseccion)
      end
   
    end # if texto

  end # dispos.each
   
end #end buscar

Añadir nuevo comentario