Я пытаюсь очистить данные оценщика графства от исторических значений свойств для нескольких участков, сгенерированных с использованием javascript от https://www.washoecounty.us/assessor/cama/?command=assessment_data&parid=07101001, используя phantomjs, управляемый RSelenium. «paraid» в URL-адресе - 9-значный номер отправления. У меня есть dataframe, содержащий список номеров посылок, которые меня интересуют (в общей сложности несколько сотен), но были попытки сделать код работать на небольшое подмножество тех:Невозможно очистить несколько страниц с помощью phantomjs в r
parcel_nums
[1] "00905101" "00905102" "00905103" "00905104" "00905105"
[6] "00905106" "00905107" "00905108" "00905201" "00905202"
мне нужно очистите данные в таблице, сгенерированной на странице, для каждой посылки и сохраните ее. Я решил написать страницу в файл «output.htm», а затем проанализировать файл позже. Мой код выглядит следующим образом:
require(plyr)
require(rvest)
require(RSelenium)
require(tidyr)
require(dplyr)
parcel_nums <- prop_attr$APN[1:10] #Vector of parcel numbers
pJS <- phantom()
remDr <- remoteDriver(browserName = "phantomjs")
remDr$open()
result <- remDr$phantomExecute("var page = this;
var fs = require(\"fs\");
page.onLoadFinished = function(status) {
var file = fs.open(\"output.htm\", \"w\");
file.write(page.content);
file.close();
};")
for (i in 1:length(parcel_nums)){
url <- paste("https://www.washoecounty.us/assessor/cama/?command=assessment_data&parid=",
parcel_nums[i], sep = "")
Sys.sleep(5)
emDr$navigate(url)
dat <- read_html("output.htm", encoding = "UTF-8") %>%
html_nodes("table") %>%
html_table(, header = T)
df <- data.frame(dat)
#assign parcel number to panel
df$apn <- parcel_nums[i]
#on first iteratation initialize final data frame, on sebsequent iterations append the final data frame
ifelse(i == 1, parcel_data <- df, parcel_data <- rbind(parcel_data, df))
}
remDr$close
pJS$stop()
Это будет работать идеально подходит для одной или двух итераций цикла, но он внезапно прекращает сохранение данных, полученных с помощью JavaScript и выдает ошибку:
Error in `$<-.data.frame`(`*tmp*`, "apn", value = "00905105") :
replacement has 1 row, data has 0
который объясняется тем, что синтаксический анализатор не находит таблицу в выходном файле, потому что она не сохраняется. Я не уверен, есть ли проблема с реализацией, которую я выбрал, или если есть какая-то идиосипия конкретного сайта, вызывающего проблему. Я не знаком с JavaScript, поэтому используемый фрагмент кода берется из примера, который я нашел. Спасибо за любую помощь.
Ответ на этот вопрос работал отлично. Я также переместил Sys.sleep (5) после $ navigate, чтобы позволить странице загружать javascript. Теперь цикл завершается.
Я запустил ваш код, но получаю сообщение об ошибке: 'code' (неопределенная ошибка в вызове RCurl. Ошибка в queryRD (paste0 (serverURL, "/ session /", sessionInfo $ id, "/ url"),:) –
Игнорировать этот последний комментарий. Я добавил Sys.sleep после команды $ open, и ошибка исчезла. –