使用rvest提取.experience内容返回character(0)求助
问题排查与解决方案
问题原因
目标内容是JavaScript动态渲染生成的,read_html()只能获取服务器直接返回的静态HTML,而这部分内容在静态HTML中并不存在,因此使用.experience选择器会返回character(0)。
你可以验证这一点:将静态HTML输出查看,搜索.experience相关内容,会发现完全没有对应的DOM元素:
cat(as.character(page))
解决方案
方法1:使用RSelenium处理动态渲染
RSelenium可以模拟浏览器行为,等待JS执行完成后再提取内容,步骤如下:
- 安装依赖包并配置浏览器驱动(如ChromeDriver,需确保其路径在系统环境变量中)
- 启动浏览器会话加载页面
- 提取目标元素文本
# 安装RSelenium(仅首次需要) install.packages("RSelenium") library(RSelenium) # 启动Chrome会话 driver <- rsDriver(browser = "chrome", port = 4567L) remDr <- driver[["client"]] # 加载目标页面 remDr$navigate("https://yoopies.fr/recherche-aide-a-domicile/results?auto=1&c=paris") # 等待页面渲染完成(根据网络情况调整等待时间) Sys.sleep(5) # 提取所有.experience元素的文本 experience_elements <- remDr$findElements(using = "css selector", value = ".experience") References <- sapply(experience_elements, function(el) el$getElementText()) # 清理会话 remDr$close() driver$server$stop() # 查看结果 print(References)
方法2:直接调用后台API(更高效)
现代网站通常通过AJAX请求从后台API获取数据,再用JS渲染到页面上。你可以通过浏览器开发者工具的「Network」面板,筛选XHR请求,找到返回用户数据的API接口,直接请求接口获取数据:
library(httr) library(jsonlite) # 替换为实际抓包得到的API地址(需自行确认) api_url <- "https://yoopies.fr/api/your-target-endpoint?auto=1&c=paris" # 发送请求解析数据 response <- GET(api_url) data <- fromJSON(content(response, "text")) # 提取experience字段(需根据API返回的结构调整) References <- data$items$experience print(References)
这种方法无需模拟浏览器,速度更快,稳定性更高,优先推荐。
内容的提问来源于stack exchange,提问作者laurent_grouet
相关产品推荐
相关产品推荐

