R - Использование rvest для очистки отзывов Google + - PullRequest
0 голосов
/ 05 мая 2018

В рамках проекта я пытаюсь очистить полные отзывы от Google + (в предыдущих попытках на других сайтах мои обзоры были усечены до More, который скрывает полный обзор, если вы не нажмете на него).

Я выбрал пакет rvest для этого. Тем не менее, я не получаю желаемых результатов.

Вот мои шаги

library(rvest)
library(xml2)
library(RSelenium)

queens <- read_html("https://www.google.co.uk/search?q=queen%27s+hospital+romford&oq=queen%27s+hospitql+&aqs=chrome.1.69i57j0l5.5843j0j4&sourceid=chrome&ie=UTF-8#lrd=0x47d8a4ce4aaaba81:0xf1185c71ae14d00,1,,,")

#Here I use the selectorgadget tool to identify the user review part that I wish to scrape

reviews=queens %>%
html_nodes(".review-snippet") %>%
html_text()

Однако, похоже, это не работает. Я не получаю вывод здесь.

Я довольно новичок в этом пакете и веб-скребке, поэтому любые замечания по этому вопросу будут с благодарностью.

1 Ответ

0 голосов
/ 05 мая 2018

Вот рабочий процесс с RSelenium и rvest:
1. Прокрутите вниз любое время, чтобы получить столько содержимого, сколько вы хотите, не забывайте время от времени делать паузу, чтобы содержимое загрузилось.
2. Нажмите на все кнопки «нажмите на больше» и получите полный обзор.
3. Получить PageSource и использовать Rvest, чтобы получить все отзывы в списке

То, что вы хотите очистить, не является статичным, поэтому вам нужна помощь RSelenium. Это должно работать:

library(rvest)
library(xml2)
library(RSelenium)

rmDr=rsDriver(browser=c("chrome"), chromever="73.0.3683.68")
myclient= rmDr$client
myclient$navigate("https://www.google.co.uk/search?q=queen%27s+hospital+romford&oq=queen%27s+hospitql+&aqs=chrome.1.69i57j0l5.5843j0j4&sourceid=chrome&ie=UTF-8#lrd=0x47d8a4ce4aaaba81:0xf1185c71ae14d00,1,,,")
#click on the snippet to switch focus----------
webEle <- myclient$findElement(using = "css",value = ".review-snippet")
webEle$clickElement()
#simulate scroll down for several times-------------
scroll_down_times=20
for(i in 1 :scroll_down_times){
    webEle$sendKeysToActiveElement(sendKeys = list(key="page_down"))
    #the content needs time to load,wait 1 second every 5 scroll downs
    if(i%%5==0){
        Sys.sleep(1)
    }
}
#loop and simulate clicking on all "click on more" elements-------------
webEles <- myclient$findElements(using = "css",value = ".review-more-link")
for(webEle in webEles){
    tryCatch(webEle$clickElement(),error=function(e){print(e)}) # trycatch to prevent any error from stopping the loop
}
pagesource= myclient$getPageSource()[[1]]
#this should get you the full review, including translation and original text-------------
reviews=read_html(pagesource) %>%
    html_nodes(".review-full-text") %>%
    html_text()

#number of stars
stars <- read_html(pagesource) %>%
    html_node(".review-dialog-list") %>%
    html_nodes("g-review-stars > span") %>%
    html_attr("aria-label")


#time posted
post_time <- read_html(pagesource) %>%
    html_node(".review-dialog-list") %>%
    html_nodes(".dehysf") %>%
    html_text()
...