Ghid pas cu pas pentru a utiliza R și Selenium pentru a zgâria empleos publos

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe pacha.dev/blogși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)


Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.

Din cauza întârzierilor cu plata bursei mele, dacă această postare vă este utilă, vă cer cu drag o donație minimă pentru a -mi cumpăra o cafea. Acesta va fi folosit pentru a continua eforturile mele open source. Explicația completă este aici: un mesaj personal de la un contribuabil open source.

Motivație

Prietenul meu Nicolas Didier m -a întrebat despre citirea empleos publicos cu R sau Python. Iată un scurt exemplu pentru el și oricine ar putea beneficia de citirea acestui lucru.

Următorii pași au fost adaptați de la un tutorial pe care l -am predat la Universitatea din Michigan (Go Blue!) În 2023.

Pachete R necesare

  • Rselenium: Integrarea R-Selenium
  • Rvest: procesare HTML
  • DPlyr: Pentru a încărca operatorul de conducte (poate fi utilizat mai târziu pentru curățarea datelor)
  • Purrr: iterație (adică operațiuni repetate)

Am instalat rselenium din consola R:

if (!require(RSelenium)) install.packages("RSelenium")

# or

remotes::install_github("ropensci/RSelenium")

Pentru restul pachetelor:

if (!require(rvest)) install.packages("rvest")
if (!require(dplyr)) install.packages("dplyr")
if (!require(purrr)) install.packages("purrr")

Instalarea seleniumului și cromului/cromului

Notă pentru utilizatorii Ubuntu/Debian: trebuie să verificăm asta chrome sau chromium este instalat în sistemul nostru. Una dintre numeroasele opțiuni este utilizarea consolei de bash.

sudo add-apt-repository ppa:savoury1/chromium
sudo apt update
sudo apt install chromium-browser
sudo apt install chromium-chromedriver

Nu utilizați PPA va instala versiunea SNAP a cromului, care nu este compatibilă cu Selenium.

Am încercat să încep seleniul așa cum este menționat în ghidul oficial și nu a funcționat.

A trebuit să instalez cromul. Sunt pe Manjaro și am fugit sudo pacman -S chromium. Utilizatorii Windows/Mac pot utiliza Google Chrome.

O cerință suplimentară era să descarci serverul Selenium. Pe baza acestui lucru, am început prin crearea unui director care să stocheze datele pentru această postare tastând acest lucru în terminalul de cod vs:

mkdir -p /tmp/didier-example
cd /tmp/didier-example

Apoi am deschis r witn R și a descărcat fișierul JAR:

url_jar <- "https://github.com/SeleniumHQ/selenium/releases/download/selenium-3.9.1/selenium-server-standalone-3.9.1.jar"
sel_jar <- "selenium-server-standalone-3.9.1.jar"

if (!file.exists(sel_jar)) {
  download.file(url_jar, sel_jar)
}

A trebuit să conduc Selenium de la un nou terminal:

cd /tmp/didier-example
java -jar selenium-server-standalone-3.9.1.jar

Înapoi la terminalul R, am fost în sfârșit în condiții să controlez browserul de la R:

library(RSelenium)
library(rvest)
library(dplyr)
library(purrr)

rmDr <- remoteDriver(port = 4444L, browserName = "chrome")

rmDr$open(silent = TRUE)

url <- "https://www.empleospublicos.cl"

rmDr$navigate(url)

Acest lucru ar trebui să afișeze o nouă fereastră Chrome/Chromium care spune că „Chrome este controlat de software -ul de testare automată”.

Răzuirea datelor

Folosind inspectorul browserului (Ctrl + Shift + I), am explorat pagina pentru a vedea că bara de căutare corespunde:

De exemplu, pot căuta „Misterio de Salud”, deoarece au existat multe posturi ale organizației pe pagina de destinație:

search_box <- rmDr$findElement(using = "id", value = "buscadorprincipal")
search_box$sendKeysToElement(list("Ministerio de Salud", key = "enter"))

Acest lucru a tastat „Misterio de Salud” și a dat clic pe căutarea mea în numele meu. Inspectarea rezultatelor văd că fiecare ofertă de muncă începe


Ministerio de Salud

Constitución

No pide experiencia

html <- read_html(rmDr$getPageSource()((1))) offers <- html %>% html_nodes("div.items") offers_tbl <- map_df(offers, function(offer) { # Extract position (job title) position <- offer %>% html_node("h3 a") %>% html_text(trim = TRUE) # Extract organization (usually the first

inside .top) organization <- offer %>% html_node(".top p") %>% html_text(trim = TRUE) # Extract city (the second

inside .cnt) city <- offer %>% html_nodes(".cnt p") %>% .(2) %>% html_text(trim = TRUE) tibble( position = position, organization = organization, city = city ) })

Rezultatul are următoarea structură:

offers_tbl
# A tibble: 552 × 3
   position                                                   organization city 
                                                                 
 1 Medico (a) especialista en Anestesiología 44 horas         Servicio de… Cons…
 2 Titulares de la Planta Profesional Ley 18.834              Servicio de… Valp…
 3 ENFERMERA-O, JORNADA DIURNA, GRADO 12, PARA SERVICIO CLÍN… Servicio de… Reco…
 4 Psiquiatra infanto-juvenil sistema de atención intersecto… Servicio de… La P…
 5 Neurólogo(a) adulto GES Alzheimer y otras demencias        Servicio de… Puen…
 6 Médico(a) especialista en Neurología Infantil Hospital de… Servicio de… Cast…
 7 Arquitecto de Software                                     Central de … Ñuñoa
 8 TENS OPERADOR DE EQUIPOS DE ESTERILIZACIÓN                 Servicio de… Peña…
 9 (850-2892) Médico Especialista Broncopulmonar o Internist… Servicio de… Talc…
10 Enfermero(a) Clínico(a) Atención Abierta y Cerrada         Servicio de… Huas…
glimpse(offers_tbl)
> glimpse(offers_tbl)
Rows: 552
Columns: 3
$ position      "Medico (a) especialista en Anestesiología 44 horas", "Ti…
$ organization  "Servicio de Salud Maule / Hospital de Constitución", "Se…
$ city          "Constitución", "Valparaíso", "Recoleta", "La Pintana", "…

Știu că acesta este un exemplu simplu, dar ar trebui să permită diferite tipuri de explorare și extragerea datelor. Sper să ajute.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.