htmlParse - 内部文本

htmlParse - inner text

我需要从 html 文档中使用 htmlParse(包:XML)在 R:

中抓取此文本
<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)
}

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)