如何通过id选择特定的css节点

时间:2015-08-20 20:37:00

标签: html css r web-scraping rvest

我正在尝试使用rvest包从网页中抓取数据。在一个简单的格式中,html代码如下所示:

<div class="style">
   <input id="a" value="123">
   <input id="b">
</div>

我想从第一个输入中获取值123。我尝试了以下R代码:

library(rvest)
url<-"xxx"
output<-html_nodes(url, ".style input")

这将返回输入标签列表:

[[1]]
<input id="a" value="123">
[[2]]
<input id="b">

接下来我尝试使用html_node通过id:

引用第一个输入标记
html_node(output, "#a")

这里它返回了一个空值列表,而不是我想要的输入标签。

[[1]]
NULL
[[2]]
NULL

我的问题是,如何使用其ID引用输入标记?

3 个答案:

答案 0 :(得分:21)

您可以使用xpath:

require(rvest)
text <- '<div class="style">
   <input id="a" value="123">
   <input id="b">
</div>'

h <- read_html(text)

h %>% 
  html_nodes(xpath = '//*[@id="a"]') %>%
  xml_attr("value")

获取css和xpath选择器的最简单方法是使用http://selectorgadget.com/。 对于像您这样的特定属性,使用chrome的开发人员工具栏来获取xpath,如下所示: enter image description here

答案 1 :(得分:2)

使用直接CSS选择器可以正常工作:

library(rvest)

doc <- '<div class="style">
   <input id="a" value="123">
   <input id="b">
</div>'

pg <- html(doc)
html_attr(html_nodes(pg, "div > input:first-of-type"), "value")

## [1] "123"

答案 2 :(得分:0)

添加答案BC我没有看到用于通过ID选择的简单CSS选择器的简写:使用#your_id_name

h %>% 
  html_node('#a') %>%
  html_attr('value')

根据需要输出“ 123”。

与其他设置相同:

require(rvest)
text <- '<div class="style">
   <input id="a" value="123">
   <input id="b">
</div>'

h <- read_html(text)