gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:31:12 25 4
gpt4 key购买 nike

我正在尝试从 this link 中抓取一些数据.

依次选择三个下拉菜单中的选项 - “裁剪组”、“裁剪”和“品种名称”,然后单击“显示功能”按钮,可以选择导出到 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

然而,由于它是连续的,我无法获得下一个选项。

html_nodes(pg, "select[id='_ctl0_ContentPlaceHolder1_ddlCrop'] option")
{xml_nodeset (0)}

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

最佳答案

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

library(RSelenium)
library(XML)

-连接selenium驱动

rD <- rsDriver()
remDr <- rD[["client"]]
remDr$navigate("http://seednet.gov.in/SeedVarieties/Varietydetail.aspx")

-循环遍历已经提取的'crpgp'并使用它发送 key 以循环提取相应的'crop'

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()

关于r - 使用 R 从多个顺序下拉菜单中抓取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48276473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com