使用soundcloud.comR中的rvest包抓取www.example.com

xlpyo6sf  于 2023-06-19  发布在  其他
关注(0)|答案(1)|浏览(91)

我试图刮这个URL得到加拿大前50名soundcloud艺术家的名字。
使用SelectorGadget,我选择了艺术家的名字,它告诉我路径是'.sc-link-light'。
我的第一次尝试如下:

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

soundcloud <- read_html("https://soundcloud.com/charts/top?genre=all-music&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()

这再次产生了相同的结果。
我到底做错了什么?我相信这应该给予我名单上的艺术家名字。任何帮助都是感激的,谢谢。

eh57zj3b

eh57zj3b1#

您正在尝试抓取的网页是动态的。因此,您将需要使用RSelenium这样的库。下面是一个示例脚本:

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

url <- "https://soundcloud.com/charts/top?genre=all-music&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)

相关问题