#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, и я отмечаю это как ответ на основании того, что я считаю, что ваше решение будет работать. Я сохраню это в качестве ссылки для дальнейшего использования в проектах веб-очистки, включающих динамические веб-страницы. Спасибо вам за вашу помощь.