-1

我需要从 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)
}
4

1 回答 1

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"

将结果粘贴在 a 中应该非常简单data.frame,将迭代包装在 an lapplythendplyr::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) 
于 2015-04-16T13:53:39.540 回答