RSelenium中findElement函数爬取valutrades数据的参数填写问题
RSelenium findElement参数配置及目标页面爬取方案
参数基础说明
findElement()是RSelenium中用来定位页面元素的核心函数,两个参数的定义如下:
using:指定元素定位的策略,常用取值包括:css selector:通过CSS选择器定位,适用场景最广xpath:通过元素的XPath路径定位,适合复杂层级的元素匹配id:通过元素的id属性定位,定位精度最高class name:通过元素的class属性定位name:通过元素的name属性定位
value:对应你选择的定位策略的具体匹配内容
目标页面定位示例
你要爬取的情绪页面的所有货币对情绪数据都存储在class为sentiment-row的容器中,以下是实际可用的参数配置:
library(RSelenium) rD <- rsDriver(browser="chrome",port=0999L, verbose=F,chromever = "95.0.4638.54") remDr <- rD[["client"]] remDr$navigate("https://www.valutrades.com/en/sentiment") # 等待页面动态渲染完成 Sys.sleep(3) # 示例1:用CSS选择器定位EUR/USD的多头占比元素 webElem1 <- remDr$findElement(using = "css selector", value = ".sentiment-row:nth-child(1) .buy-percentage") # 提取数值 eurusd_buy <- webElem1$getElementText()[[1]] # 示例2:用XPath定位EUR/USD的空头占比元素 webElem2 <- remDr$findElement(using = "xpath", value = '//*[@class="sentiment-row"][1]//*[@class="sell-percentage"]') # 提取数值 eurusd_sell <- webElem2$getElementText()[[1]]
批量爬取全量数据完整代码
如果你需要一次性爬取所有货币对的情绪数据,可以参考以下代码:
library(RSelenium) rD <- rsDriver(browser="chrome",port=0999L, verbose=F,chromever = "95.0.4638.54") remDr <- rD[["client"]] remDr$navigate("https://www.valutrades.com/en/sentiment") Sys.sleep(3) # 定位所有货币对的情绪行容器 sentiment_rows <- remDr$findElements(using = "css selector", value = ".sentiment-row") # 循环提取所有货币对的名称、多头占比、空头占比 sentiment_data <- lapply(sentiment_rows, function(row){ pair <- row$findChildElement(using = "css selector", value = ".sentiment-pair")$getElementText()[[1]] buy_pct <- row$findChildElement(using = "css selector", value = ".buy-percentage")$getElementText()[[1]] sell_pct <- row$findChildElement(using = "css selector", value = ".sell-percentage")$getElementText()[[1]] return(data.frame(pair, buy_pct, sell_pct)) }) sentiment_data <- do.call(rbind, sentiment_data) print(sentiment_data) # 关闭进程避免端口占用 remDr$close() rD$server$stop()
注意:运行前请确保你的chromever参数和本地安装的Chrome浏览器版本匹配,否则会出现驱动启动失败的问题
内容的提问来源于stack exchange,提问作者mr.T
相关产品推荐
相关产品推荐

