Я пытаюсь извлечь текст из базы данных дел с этого веб-сайта правительства - https://www.te.gob.mx/buscador/ - используя RSelenium.
Мне удалось заставить RSelenium вытащить текст, который я заинтересовать и сохранить его в фрейме данных вручную, однако я хочу, чтобы это автоматически повторялось через for loop
. Браузер переходит на веб-сайт, который выглядит следующим образом:
Затем он нажимает на первую ссылку на сайте в разделе «Резюме», которая открывает страницу, которая выглядит следующим образом:
Я извлекаю некоторые из текст с каждой из этих подстраниц «Resumen» и сохранение их в кадре данных.
Вот как выглядит мой код:
setwd("C:/Users/ohenr/Dropbox/10-19 Research Projects/16 R")
getwd()
pacman::p_load(rvest, tidyverse, stringr, RSelenium, data.table) #loads all the packages in one command
url <- "https://www.te.gob.mx/buscador"
# Setting up the remote driver
remDr <- remoteDriver(remoteServerAddr = "192.168.99.100", port = 4445L,
browserName = "firefox")
# Input this into the terminal to start the firefox image in docker
# docker run -d -p 4445:4444 selenium/standalone-firefox:2.53.0
# Open the remote Driver (open firefox in R Selenium)
remDr$open()
# Navigating throught the mx resumen website
remDr$navigate(url)
# Click the regions on the left side of the webpage
region_lists <- remDr$findElements(using = "css selector", ".salas-tree")
region_lists[[1]]$clickElement()
#List resumen elements from the first page
res <- remDr$findElements("css selector", "#resumenResultados")
# number of resumen on the first page
res_n <- length(res)
#build a dataframe that has that same number of observations
resumen.df <- data.frame(expediente = character(res_n),
entidad = character(res_n),
turno = character(res_n),
res_text = character(res_n),
stringsAsFactors = F)
for (j in 1:res_n) {
res[[j]]$clickElement() # click on the jth resumen
elements <- remDr$findElements(using = "css selector", "h4") #extract the h4 elements from the resumen subpage
expediente <- unlist(elements[[1]]$getElementText())
entidad <- unlist(elements[[8]]$getElementText())
turno <- unlist(elements[[5]]$getElementText())
res_text <- remDr$findElement("css selector", "#swal2-content > div > div > p")
res_text <- unlist(res_text$getElementText())
resumen.df$expediente[j] <- expediente
resumen.df$entidad[j] <- entidad
resumen.df$turno[j] <- turno
resumen.df$res_text[j] <- res_text
#click the okay button on the page to exit the resumen subpage
button <- remDr$findElement("css selector", "body > div.swal2-container.swal2-center.swal2-fade.swal2-shown > div > div.swal2-actions > button.swal2-confirm.swal2-styled")
button$clickElement()
}
Однако, как только я запускаю l oop, я получаю эта ошибка:
Error in elements[[1]] : subscript out of bounds
Я предполагаю, что проблема связана с тем, как все индексируется в l oop, поскольку я могу заполнять фрейм данных, выполняя по одной строке за раз. Любые идеи о том, как я могу правильно повторить этот процесс?