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