(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
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 firstMinisterio de Salud
Constitución
No pide experiencia
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 city1 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.
