Отдельные строки, возвращаемые html_text в rvest - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь извлечь удобства для отеля, используя rvest.

library(rvest)
hotel_url="https://www.tripadvisor.com/Hotel_Review-g187791-d13494726-Reviews-Palazzo_Caruso-Rome_Lazio.html"
amenities<-hotel%>%
    html_node(".hotels-hr-about-amenities-AmenityGroup__amenitiesList--3MdFn")%>%
    html_text()

Полученный текст не отделяет одно удобство от другого:

[1] "Платная частная парковка поблизости Бесплатный высокоскоростной интернет Inte rnet (WiFi) КофейняВелосипедные турыПоходные турыАвтопрокатФакс / ксерокопированиеБагажная камера хранения багажа Бесплатный доступ в ИнтернетWifiPubli c wifiИнтернетЗавтрак в отелеЗавтрак в номереConciergeПолученный доступ в лаунджНе для некурящихСолнечная терраса24-часовая стойка регистрацииЧастная регистрация заезда / выезда 101

Есть ли способ добавить разделители (например, ";") между удобствами?

1 Ответ

0 голосов
/ 13 февраля 2020

Вам нужно go на один или два уровня глубже в структуре html, чтобы вытянуть текст в виде списка. Это можно сделать с помощью функции html_children().
Подробнее см. В комментариях:

library(rvest)
hotel_url="https://www.tripadvisor.com/Hotel_Review-g187791-d13494726-Reviews-
Palazzo_Caruso-Rome_Lazio.html"
hotel<-read_html(hotel_url)

amenities<-hotel%>%
  html_node(".hotels-hr-about-amenities-AmenityGroup__amenitiesList--3MdFn")%>% 
       html_children()

#last child node is the unhighlighted amenities
#get text for highlighted amenities
highlighted<-amenities[xml_length(amenities)==1] %>% html_text()
#drill down 1 more level for unhighlighted amenities
unhighlighted<-amenities[xml_length(amenities)>1] %>% html_children() %>% html_text()



> highlighted
[1] "Paid private parking nearby"     "Free High Speed Internet (WiFi)" "Coffee shop"                     "Bicycle tours"                  
[5] "Walking tours"                   "Car hire"                        "Fax / photocopying"              "Baggage storage"                
> unhighlighted
 [1] "Free internet"                "Wifi"                         "Public wifi"                  "Internet"                    
 [5] "Breakfast available"          "Breakfast in the room"        "Concierge"                    "Executive lounge access"     
 [9] "Non-smoking hotel"            "Sun terrace"                  "24-hour front desk"           "Private check-in / check-out"
[13] "Laundry service" 
...