如何针对R中包含空格的任意HTML属性?

时间:2019-05-09 07:17:13

标签: r web-scraping rvest

<a href="?p=978" title="last page" class="last">978</a>

我正在尝试定位上面的title属性。我知道,如果html标记包含类似id="last_page"的内容,我可以使用以下代码:

link %>% 
    html_nodes("#last_page") %>% 
    html_text()

我不了解的是如何定位任意属性,或者如何定位包含空格的idclass属性。

2 个答案:

答案 0 :(得分:3)

对于idclass以外的属性,您可以使用类似[title='last page']的名称。以下返回"978"

library(rvest)
library(dplyr)

node <- read_html('<a href="?p=978" title="last page" class="last">978</a><a href="?p=blah" title="last page" class="last">blah</a>')

node %>% 
    html_node("[title='last page']") %>% 
    html_text()

# [1] "978"

我不确定,但是我认为带空格的id属性是不可以。不过,您仍然可以使用与上述相同的策略来访问它:

node <- read_html('<a href="?p=978" id="last page" class="last">978</a><a href="?p=blah" title="last page" class="last">blah</a>')

node %>% 
    html_node("[id='last page']") %>% 
    html_text()

# [1] "978"

class这样的class="last page"服饰是有效的,但实际上包含两个类别lastpage,而不是一个last page。您可以将.与其中之一或两者同时使用来访问它:

node %>% 
    html_node(".last") %>% 
    html_text()

# [1] "978"

node %>% 
    html_node(".page") %>% 
    html_text()

# [1] "978"

node %>% 
    html_node(".last.page") %>% 
    html_text()

# [1] "978"

答案 1 :(得分:1)

我们可以使用xpath选择id

library(dplyr)
library(rvest)

link %>% 
  html_nodes(xpath = '//*[@id="last page"]') %>% 
  html_text()