Очистка soundcloud.com с пакетом rvest в R

#r #web-scraping #rvest

#r #очистка веб-страниц #rvest

Вопрос:

Я пытаюсь очистить этот URL-адрес, чтобы получить имена 50 лучших исполнителей soundcloud в Канаде.

Используя SelectorGadget, я выбрал имена исполнителей, и он сообщил мне, что путь ‘.sc-link-light’.

Моя первая попытка заключалась в следующем:

 library(rvest)
library(stringr)
library(reshape2)

soundcloud <- read_html("https://soundcloud.com/charts/top?genre=all-musicamp;country=CA")

artist_name <- soundcloud %>% html_nodes('.sc-link-light') %>% html_text()

 

который выдал artist_name в виде списка из 0.

Со второй попытки я изменил последнюю строку на:

 artist_name <- soundcloud %>% html_node(xpath='//*[contains(concat( " ", @class, " " ), concat( " ", ".sc-link-light", " " ))]') %>% html_text()
 

что снова дало тот же результат.

Что именно я делаю не так? Я считаю, что это должно дать мне имена художников в списке. Любая помощь приветствуется, спасибо.

Ответ №1:

Веб-страница, которую вы пытаетесь очистить, является динамической. В результате вам нужно будет использовать библиотеку, такую как RSelenium. Пример сценария приведен ниже:

 library(tidyverse)
library(RSelenium)
library(rvest)
library(stringr)

url <- "https://soundcloud.com/charts/top?genre=all-musicamp;country=CA"

rD <- rsDriver(browser = "chrome")
remDr <- rD[["client"]]


remDr$navigate(url)
pg <- read_html(remDr$getPageSource()[[1]])
artist_name <- pg %>% html_nodes('.sc-link-light') %>% html_text()


####clean up####
remDr$close()
rD$server$stop()
rm(rD, remDr)
gc()

system("taskkill /im java.exe /f", intern=FALSE, ignore.stdout=FALSE)
 

Комментарии:

1. Спасибо Blue050205, я на самом деле работаю над облаком Rstudio, и, как вы можете себе представить, это не сработало так хорошо. Тем не менее, я кое-что прочитал о RSelenium, и я отмечаю это как ответ на основании того, что я считаю, что ваше решение будет работать. Я сохраню это в качестве ссылки для дальнейшего использования в проектах веб-очистки, включающих динамические веб-страницы. Спасибо вам за вашу помощь.