2015-08-20 2 views
4

Я пытаюсь использовать пакет rvest для очистки данных с веб-страницы. В простом формате HTML-код выглядит следующим образом:rvest как выбрать конкретный узел css по id

<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 

Вопрос в том, как я могу ссылаться на входной тег, используя его идентификатор?

ответ

14

Вы можете использовать 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

Это будет прекрасно работать с прямыми 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" 
Смежные вопросы