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