通过R中的下拉列表获取数据

时间:2016-10-26 10:23:28

标签: r rvest

我正在尝试从这个网站收集数据

http://www.lkcr.cz/seznam-lekaru-426.html (它是捷克语)

我需要经历" Okres"(地区)和" Obor"(专业化)的所有可能组合

我尝试了rvest,但它似乎没有发现有任何下拉列表,html_form返回长度为0的列表。

因此,由于我仍然是R的新手,我怎么能问"网页向我展示新的页面组合?

谢谢

JH

1 个答案:

答案 0 :(得分:3)

我使用以下内容:

library(rvest)
library(dplyr)
library(tidyr)

pg <- read_html("http://www.lkcr.cz/seznam-lekaru-426.html")

obor <- html_nodes(pg, "select[name='filterObor'] > option")
obor_df <- data_frame(
  value=xml_attr(obor, "value"),
  option=xml_text(obor)
)

glimpse(obor_df)
## Observations: 115
## Variables: 2
## $ value  <chr> "", "16", "107", "17", "1", "19", "20", "21", "22", "29...
## $ option <chr> "", "alergologie a klinická imunologie", "algeziologie"...
okres <- html_nodes(pg, "select[name='filterOkresId'] > option")
okres_df <- data_frame(
  value=xml_attr(okres, "value"),
  option=xml_text(okres)
)

glimpse(okres_df)
## Observations: 78
## Variables: 2
## $ value  <chr> "", "3201", "3202", "3701", "3702", "3703", "3801", "37...
## $ option <chr> "", "Benešov", "Beroun", "Blansko", "Brno-město", "Brno...

以防万一字段顺序发生变化(加上熟悉使用CSS选择器和XPath选择器定位节点的好处)。

你仍然需要遍历每一对(你可以使用嵌套的purrr::map调用进行迭代;我个人建议不要使用expand.gridtidyr::complete。< / p>

但是...

由于网站在提交之前使用javacript进行一些数据处理,因此您在使用rvest提交表单时会遇到问题。

您应该使用Chrome并打开开发人员工具,以查看实际按字段提交的内容,然后切换到使用httr::POST。如果你遇到麻烦,你应该在SO上打开一个新问题。