使用R从多个顺序下拉菜单中提取数据

使用R从多个顺序下拉菜单中提取数据,r,web-scraping,rvest,R,Web Scraping,Rvest,我正试图从中搜集一些数据 依次选择三个下拉菜单中的选项-“作物组”、“作物”和“品种名称”,然后使用“显示特征”按钮,可以导出到csv。我正在尝试下载所有这样的csv文件进行裁剪 我能够提取第一个下拉列表中的所有选项,如下所示 library(rvest) library(httr) library(tidyverse) pg <- read_html("http://seednet.gov.in/SeedVarieties/Varietydetail.aspx") cropgp_no

我正试图从中搜集一些数据

依次选择三个下拉菜单中的选项-“作物组”、“作物”和“品种名称”,然后使用“显示特征”按钮,可以导出到csv。我正在尝试下载所有这样的csv文件进行裁剪

我能够提取第一个下拉列表中的所有选项,如下所示

library(rvest)
library(httr)
library(tidyverse)

pg <- read_html("http://seednet.gov.in/SeedVarieties/Varietydetail.aspx")

cropgp_nodes <- html_nodes(pg, "select[id='_ctl0_ContentPlaceHolder1_ddlgroup'] option")
crpgps <- data_frame(crpgp = html_text(cropgp_nodes),
                     value = html_attr(cropgp_nodes, "value"))
crpgps
# A tibble: 24 x 2
   crpgp                  value                
   <chr>                  <chr>                
 1 --Select Crop Group--  --Select Crop Group--
 2 CEREALS                A01                  
 3 MILLETS                A02                  
 4 PULSES                 A03                  
 5 OILSEEDS               A04                  
 6 FIBRE CROPS            A05                  
 7 FORAGE CROPS           A06                  
 8 SUGAR CROPS            A07                  
 9 STARCH CROPS           A08                  
10 NARCOTICS(OTHER CROPS) A09                  
# ... with 14 more rows

在这种情况下如何刮取数据?

一个选项是使用
RSelenium
启动“Selenium”服务器

library(RSelenium)
library(XML)
-连接selenium驱动程序

rD <- rsDriver()
remDr <- rD[["client"]]
remDr$navigate("http://seednet.gov.in/SeedVarieties/Varietydetail.aspx")
-关闭连接,然后停止服务器

remDr$close()
rD[["server"]]$stop() 
v1 <- crpgps$crpgp[-1]
lst <- vector("list", length(v1))
for(i in seq_along(lst)) {
remDr$findElement("id", "_ctl0_ContentPlaceHolder1_ddlgroup")$sendKeysToElement(list(v1[i]))
elem <- remDr$findElement(using="id", value='_ctl0_ContentPlaceHolder1_ddlCrop')
elemtxt <-  elem$getElementAttribute("outerHTML")[[1]] 
elemxml <- htmlTreeParse(elemtxt, useInternalNodes=TRUE) 
 key <- xpathSApply(elemxml, "//body//option", xmlValue)[-1]

 value <- unlist(xpathSApply(elemxml, "//body//option", xmlAttrs)[-1])
if(length(value)==1 &  "--Select Crop--" %in% value) {
   lst[[i]] <- NULL
  } else  lst[[i]] <- data.frame(key, value, stringsAsFactors = FALSE)
}

res <- do.call(rbind, lst)
dim(res)
#[1] 181  2
head(res)
#                                   key value
#1                         BARLEY (JAU) A0101
#2                         PADDY (DHAN) A0102
#3                            TRITICALE A0103
#4                        WHEAT (GEHON) A0104
#5 BANYARD MILLET (KUNDIRAIVALLI/SAWAN) A0201
#6                  BUCK WHEAT (KASPAT) A0202
remDr$close()
rD[["server"]]$stop()