htmlParse - 内部文本

时间:2015-04-15 17:24:30

标签: html r parsing rvest

我需要从R:

中使用htmlParse(package:XML)的html文档中删除此文本:
<h1 class="IT">
<span class="f" id="hotel">HOTEL</span>
<span class="nowrap">
<i class="b stars ratings_stars_5  star_track"  data-track-on-mouseover=""></i>
</span>
</span>
</h1>

我正在使用此代码(代码示例)来刮取酒店的名称。但是,我需要添加酒店的评级:

for (i in seq_len(3)){

  txt <- getURL(url=baseURL[i], followlocation = TRUE, encoding="UTF-8")
  doc <- htmlParse(txt)

  hotel <- cssApply(doc, ".details>h3", cssCharacter)
  hotel <- cssApplyInNodeSet(doc, ".details", "h3", cssCharacter)
  data <- cbind(hotel)
}

1 个答案:

答案 0 :(得分:0)

rvest通常可以让这些操作更轻松:

library(rvest)
library(stringr)

pg <- html("http://www.booking.com/hotel/es/starwoodalfonso.es.html#tab-reviews")

pg %>% 
  html_nodes("i.b-sprite.stars") %>% 
  html_attr("class") %>% 
  str_extract("ratings_stars_[[:digit:]]+") %>% 
  str_replace("ratings_stars_", "") %>% 
  as.numeric()

## [1] 5

pg %>% 
  html_nodes("span#hp_hotel_name") %>% 
  html_text()

## [1] "Hotel Alfonso XIII"

应该非常简单地将结果粘贴到data.frame中,将迭代包装在lapply然后dplyr::bind_rows

修改

由于您坚持使用CSS软件包,因此您可以使用rvest + cssApply完全相同的方式:

pg <- html("http://www.booking.com/hotel/es/starwoodalfonso.es.html#tab-reviews")

pg %>% 
  cssApply("i.b-sprite.stars", cssClass) %>% 
  str_extract("ratings_stars_[[:digit:]]+") %>% 
  str_replace("ratings_stars_", "") %>% 
  as.numeric()

pg %>% cssApply("span#hp_hotel_name", cssCharacter)