2016-03-22 13 views
-3

Я хочу, чтобы очистить все отзывы пользователей из этого hotel main page, используя пакет Rvest в R.Как скрести все отзывы от HolidayIQ использования Rvest и phantomJS

я только в состоянии получить первые 10 отзывов. Следующий набор обзоров загружается нажатием кнопки «Показать больше», которая генерируется JavaScript.

Я написал следующий JavaScript - 'basic.js':

var webPage = require('webpage'); 
var page = webPage.create(); 

var fs = require('fs'); 
var path = 'taj.html' 

page.open('http://www.holidayiq.com/Taj-Exotica-Benaulim-hotel-2025.html', function (status) { 
    var content = page.content; 
    fs.write(path,content,'w') 
    phantom.exit(); 
}); 

Затем я использовал следующую команду в R:

system("./phantomjs basic.js") 

Выходной файл 'taj.html' не есть все отзывы. Таким образом, код scrape ...

pg <- read_html("taj.html") 
pg %>% html_nodes(".detail-review-by-hotel .srm") %>% html_node(".media-heading") %>% html_text() 

... только возвращает первые 10 отзывов.

ответ

1

Использование RSelenium:

library(RSelenium) 
checkForServer() #just the first time 
startServer() 
startServer(invisible = FALSE, log = FALSE) 
remDr <- remoteDriver(remoteServerAddr = "localhost" 
        , port = 4444 
        , browserName = "chrome" 
) 
remDr$open() 

Перейдите на страницу

remDr$navigate("http://www.holidayiq.com/Taj-Exotica-Benaulim-hotel-2025.html") 

Нажмите на кнопку "Показать еще" до тех пор, пока что-то нажать (когда это делается остановка вручную выполнение)

while(TRUE){ 
webElem <- remDr$findElement(using = 'css selector', "#loadMoreTextReview") 
remDr$mouseMoveToLocation(webElement = webElem) # move mouse to the element we selected 
remDr$click(1) # 2 indicates click the right mouse button 
} 

Очистить все, что вам нужно, используя селектор css (с синтаксисом, подобным REST) ​​

namesNodes <- remDr$findElements(using = 'css selector', "#result-items .media-heading") 
names<-unlist(lapply(namesNodes, function(x){x$getElementText()})) 

firstCommentNodes <- remDr$findElements(using = 'css selector', ".featured-blog-clicked") # the second element is the css selector 
firstComment<-unlist(lapply(firstCommentNodes, function(x){x$getElementText()})) 

reviewNodes <- remDr$findElements(using = 'css selector', ".detail-posted-txt p") # the second element is the css selector 
review<-unlist(lapply(reviewNodes, function(x){x$getElementText()})) 

Я предлагаю прочитать диск выбора гаджета виньетку, чтобы понять, как выбрать путь CSS ->ftp://cran.r-project.org/pub/R/web/packages/rvest/vignettes/selectorgadget.html

+0

вы можете также показать мне путь, чтобы извлечь полный текст обзора (текст после нажатия на кнопку «далее») ?? –