Веб-соскобление марки / модели / года номеров VIN в RStudio
В настоящее время я работаю над проектом, в котором мне нужно найти производителя, модель и год выпуска номеров VIN. У меня есть список из 300 разных номеров VIN. Просматривать каждый отдельный VIN-номер и вручную вводить производителя, модель и год в Excel очень неэффективно и утомительно.
Я пытался использовать пакеты Rvest с SelectorGadget, чтобы написать несколько строк кода на R, чтобы очистить этот сайт для получения информации, но мне это не удалось: http://www.vindecoder.net/?vin=1G2HX54K724118697&submit=Decode
Вот мой код:
library("rvest")
Vnum = "1G2HX54K724118697"
site <- paste("http://www.vindecoder.net/?vin=", Vnum,"&submit=Decode",sep="")
htmlpage <- html(site)
VINhtml <- html_nodes(htmlpage, ".odd:nth-child(6) , .even:nth-child(5) , .even:nth-child(7)")
VIN <- html_text(forecasthtml)
paste(forecast, collapse =" ")
Когда я пытаюсь запустить VINhtml, я получаю сообщение об ошибке: list() attr(,"class") [1] "XMLNodeSet"
Я не знаю, что я делаю не так. Я думаю, что это не работает, потому что это динамическая веб-страница, но я могу ошибаться. У кого-нибудь есть какие-либо предложения о том, как лучше подойти к этой проблеме?
Я также открыт для использования других веб-сайтов или альтернативных подходов, чтобы выяснить это. Я просто хочу найти модель, производителя и год выпуска этих VIN. Может кто-нибудь помочь мне найти эффективный способ сделать это?
Вот некоторые примеры VINs: YV4SZ592561226129 YV4SZ592371288470 YV4SZ592371257784 YV4CZ982871331598 YV4CZ982581428985 YV4CZ982481423003 YV4CZ982381423543 YV4CZ982171380593 YV4CZ982081460887 YV4CZ852361288222 YV4CZ852281454409 YV4CZ852281454409 YV4CZ852281454409 YV4CZ592861304665 YV4CZ592861267682 YV4CZ592561266859
1 ответ
Вот решение с использованием RSelenium
а также rvest
,
Чтобы запустить RSelenium, вы должны сначала загрузить сервер селена отсюда (у меня версия 2.45). Допустим, загруженный файл находится в каталоге "Мои документы". Затем вы должны выполнить следующие два шага в cmd перед запуском RSelenium
в IDE.
Введите следующее в cmd: a) cd My Documents
# У меня установлен драйвер селен в папке "Мои документы" б), а затем введите: java -jar selenium-server-standalone-2.45.0.jar
library(RSelenium)
library(rvest)
startServer()
remDr <- remoteDriver(browserName = 'firefox')
remDr$open()
Vnum<- c("YV4SZ592371288470","1G2HX54K724118697","YV4SZ592371288470")
kk<-lapply(Vnum,function(j){
remDr$navigate(paste("http://www.vindecoder.net/?vin=",j,"&submit=Decode",sep=""))
Sys.sleep(30) # this is critical
test.html <- html(remDr$getPageSource()[[1]]) # this is RSelenium but after this we can use rvest functions until we close the session
test.text<-test.html%>%
html_nodes(".odd:nth-child(6) , .even:nth-child(5) , .even:nth-child(7)")%>%
html_text()
})
kk
[[1]]
[1] "Model: XC70" "Type: Multipurpose Passenger Vehicle" "Make: Volvo"
[[2]]
[1] "Model: Bonneville" "Make (Manufacturer): Pontiac" "Model year: 2002"
[[3]]
[1] "Model: XC70" "Type: Multipurpose Passenger Vehicle" "Make: Volvo"
remDr$close()
PS Вы можете видеть, что один и тот же путь CSS не подходит для всех VIN. Вы должны выяснить это заранее (я просто использовал путь, который вы указали в вопросе). Вы можете использовать своего рода tryCatch.