我有一个与此问题类似的问题:link。
我正在抓取此web page,我想在选项值中下载文本,我的意思是,您可以在其中读取“ Seleccionar municipio”,即html代码中的下一个节点:>
<select name="txtMunicipio" id="txtMunicipio" class="inputText"><option value="">-------------------------------------</option>
<option value="001">ALEGRIA-DULANTZI</option>
<option value="002">AMURRIO</option>
<option value="049">AÑANA</option>
<option value="003">ARAMAIO</option>
<option value="006">ARMIÑON</option>
<option value="037">ARRAIA-MAEZTU</option>
...
</select>
我想获得以下信息
ID Name
001 ALEGRIA-DULANTZI
002 AMURRIO
049 AÑANA
...
所以我尝试过的事情与我之前提到的问题类似,使用R中的下一行:
web_page<-read_html("https://catastroalava.tracasa.es/descargas/?lang=es")
web_page %>% html_nodes("select#txtMunicipio.inputText option") %>% html_attr("value")
web_page %>% html_nodes(".inputText option") %>% html_attr("value")
web_page %>% html_nodes("#txtMunicipio option") %>% html_attr("value")
web_page %>% html_nodes("select#txtMunicipio.inputText option") %>% html_text()
web_page %>% html_nodes(".inputText option") %>% html_text()
web_page %>% html_nodes("#txtMunicipio option") %>% html_text()
但是我得到的是:
character(0)
请,您能帮我在html_nodes
函数中输入哪些参数才能下载信息?
预先感谢
答案 0 :(得分:2)
尽管有关于问题重复的错误断言,但数据仍在页面上。我怀疑您使用了Selector Gadget或某些此类工具来标识呈现的页面节点,却从未查看过网站的原始来源(这是一个非常普遍的问题,这也是我对Selector Gadget十分不屑的原因之一,并且普遍认为在进行任何其他调查之前先使用它。
弹出页面是在页面加载后动态生成的,这是源代码:
我亲自编写了more than a few SO answers,演示了如何获取此类数据,但是我们将忽略这些数据的存在。
通常的想法是获取足够的javascript(由于它基于一个非常老的V8引擎版本,因此可以与V8软件包一起使用),以便让它解析数据,然后将值编组回R。
library(rvest)
library(V8)
library(purrr)
ctx <-v8() # we need to convert javascript to R
pg <- read_html("https://catastroalava.tracasa.es/descargas/?lang=es")
html_nodes(pg, xpath=".//script[contains(., 'ALEGRIA-DULANTZI')]") %>%
html_text() %>%
gsub("function escribeMunicipios.*$", "", .) %>% # get rid of everything but the data
ctx$eval(.)
ctx$get("municipios") %>%
setNames(c("ID", "Name"))
## ID Name
## 1 001 ALEGRIA-DULANTZI
## 2 002 AMURRIO
## 3 049 AÑANA
## 4 003 ARAMAIO
## 5 006 ARMIÑON
## 6 037 ARRAIA-MAEZTU
## 7 008 ARRAZUA-UBARRUNDIA
## 8 004 ARTZINIEGA
## 9 009 ASPARRENA
## 10 010 AYALA
## ... goes on ...