我正在尝试使用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引用输入标记?
答案 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,如下所示:
答案 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)