Scraping al listado de la Bolsa de Sanitat de la GVA


En la Pandemia, descubrí la página de Dades Obertes de la GVA, donde aplicando la técnica de Scraping y R podía generar gráficas de los Datos Históricos del Covid por municipios.

Desde entonces, estoy haciendo varios proyectos de Scraping para uso personal, entre ellos, este de la Bolsa de Instituciones Sanitarias de la GVA. Me di cuenta que la consulta de los listados de puntos por categoría y departamento y el de situación por categoría y departamento no están cruzados, y me pareció interesante cruzarlos y tenerlos todos en una misma tabla en formato CSV para poder analizar los datos como hace la APP no oficial «Bolsa Sanidad C. Valenciana» pero en bruto.

Para ello, he compartido un Script en GitHub, donde cargando la función y llamando a la función con los parámetros correctos, nos genera un archivo llamado bolsa.csv con los datos.

Pero empecemos primero contando como analicé las búsquedas y como fui construyendo el Script.

Fase de investigación

Lo primero que observé es que en las búsquedas, hay tres campos importantes que son:

  • Turno.
  • Categoría.
  • Departamento.

Lo primero que tenía que hacer, era generar un diccionario de estos campos, cosa que no me fue difícil accediendo en modo desarrollador en el formulario del filtro y ver los Combobox.

Turno

Este caso es muy simple, y en el Script lo preparo así:

turnos <- data.frame(
    "turnoCod" = c("O","P"),
    "turnoDesc" = c("ORDINARIO","PROMOCIÓN INTERNA"),
    "turnoDescv" = c("ORDINARI","PROMOCIÓ INTERNA TEMPORAL")
  )

Categoría

En el caso de las categorías tampoco fue difícil, y también vi que se relacionaban mediante categoriaCod formado por un código numérico de 4 cifras y categoriaDesc donde se describia en texto la categoría.

categorias <- data.frame(
    "categoriaCod" = c("0001",
                       "0002",

.........

    "categoriaDesc" = c("ENGINYER D'APLICACIONS I SISTEMES",
                        "ANALISTA PROGRAMADOR I DE SISTEMES",
                        "METGE CONDUCTES ADDICTIVES",
.....

Departamento

Pasa lo mismo que el caso anterior, y se relaciona mediante departamentoCod y departamentoDesc.

departamentos <- data.frame(
    "departamentoCod" = c("ALI","ALY","ARN","CAS","CLI","DEN","ELD","ELX","GAN","GEN","LFE","MBA","ORI","PES","PLA","REQ","RIB","SA","SAG","SJO","SPA","SPC","SPV","SPY","SV","TRV","VIN","XAT"),
    "departamentoDesc" = c("ALICANTE","ALCOY","ARNAU","CASTELLON","CLINICO","DENIA","ELDA","ELX","GANDIA","GENERAL","LA FE","MARINA","ORIHUELA","PESET","LA PLANA","REQUENA","RIBERA","SES ALICANTE","SAGUNTO","SAN JOAN","S. P. ALICANTE","S. P.  CASTELLÓN","S. P. VALENCIA","S. P. ALCOY","SES VALENCIA","TORREVIEJA","VINAROZ","XATIVA")
  )

Y con todos estos diccionarios preliminares, nos ponemos en acción.

Listado puntuación

Si entramos en modo desarrollador en el navegador y consultamos el listado de una categoría en concreto y un departamento podemos observar que se realiza una llamada a la página http://www2.san.gva.es/bolsa/lstCandidatosListaOperativa.jsp donde se le pasan los siguientes parámetros:

  • codedicion: El código de la edición, que en el momento de escribir este artículo es la 19.0.5.0.
  • turnoCod
  • categoriaCod
  • departamentoCod
  • turnoDesc
  • categoriaDesc
  • departamentoDesc
  • posicionFinal: Posición final a la hora de realizar la consulta.
  • posicionInicial: Posición inicial a la hora de realizar la consulta.
  • nw: este parámetro puede ser true o false. Deduzco que será el formato a mostrar si es el New o no.

Por tanto, con todos estos parámetros, tan solo hemos de construir una consulta, como por ejemplo:

http://www2.san.gva.es/bolsa/lstCandidatosListaOperativa.jsp?codedicion=19.0.5.0&turnoCod=O&categoriaCod=0011&departamentoCod=ALI&turnoDesc=ORDINARIO&categoriaDesc=AUXILIAR%ADMINISTRATIU&departamentoDesc=ALICANTE&posicionFinal=5&posicionInicial=1&nw=true

Donde obtenemos los 5 primeros de la lista de la Categoría Auxiliar Administrativo de Alicante:

Nota: los **** los he puesto yo

Lista de situación

Parecido a la lista anterior, deducimos que la dirección para consultar la lista de situación es: http://www2.san.gva.es/bolsa/lstSituacionCandidatos.jsp y vemos que los parámetros que requiere son:

  • turnoCod
  • categoriaCod
  • departamentoCod
  • turnoDesc
  • categoriaDesc
  • departamentoDesc
  • posicionFinal: Posición final a la hora de realizar la consulta.
  • posicionInicial: Posición inicial a la hora de realizar la consulta.
  • nw: este parámetro puede ser true o false. Deduzco que será el formato a mostrar si es el New o no.

Con estos parámetros, podemos realizar la siguiente consulta, donde se nos mostraría las 5 primeras posiciones de la lista de Administrativo de La Fe

https://www2.san.gva.es/bolsa/lstSituacionCandidatos.jsp?turnoCod=O&categoriaCod=0087&departamentoCod=LFE&turnoDesc=ORDINARIO&categoriaDesc=ADMINISTRATIU&departamentoDesc=LA%FE&posicionFinal=5&posicionInicial=1&nw=true

Obteniendo el siguiente resultado:

Scraping

Mediante la función read_html del paquete rvest, paso la dirección que quiero leer y con html_nodes extraigo partes del HTML.

Podéis ver el código en mi GitHub.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Últimos posts

Extraer archivos adjuntos de un fichero EML

Extraer archivos adjuntos de un fichero EML

Dic 16, 2022

Siguiendo con los retos de la página de desafíos que ya comentaba en un post anterior, me encontré con examinar…