You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Rvest和Selenium提取LinkedIn中<span>内指定文本遇阻

解决LinkedIn经验板块职位名称爬取问题

问题分析

你的第二次代码返回空对象,核心原因是LinkedIn的经验板块内容依赖JavaScript动态渲染:直接用read_html()获取的静态HTML里,#experience节点下并没有实际的职位数据,自然提取不到内容。另外,逐层使用html_nodes()的写法也可以简化为复合CSS选择器,但前提是页面内容已完整加载。

解决方案

方法1:处理动态加载内容(推荐)

使用RSelenium模拟浏览器加载页面,获取完整渲染后的源码再解析:

library(RSelenium)
library(rvest)

# 启动Chrome浏览器驱动(需提前安装对应版本的ChromeDriver)
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]

# 访问目标主页
remDr$navigate("https://www.linkedin.com/in/hadleywickham/")

# 滚动到经验板块并等待加载
remDr$executeScript("window.scrollTo(0, document.getElementById('experience').offsetTop);")
Sys.sleep(2) # 等待内容加载完成

# 获取渲染后的页面源码
page_source <- remDr$getPageSource()[[1]]
signals <- read_html(page_source)

# 提取经验板块下的所有职位名称
roles <- signals %>%
  html_nodes("#experience .pvs-list__item--line-separated .visually-hidden") %>%
  html_text()

# 清理资源
remDr$close()
driver$server$stop()

方法2:优化静态页面选择器(仅当静态页面包含数据时有效)

如果目标页面的经验板块在静态HTML中已存在,可以简化CSS选择器,避免逐层筛选的冗余:

roles <- signals %>%
  html_nodes("#experience span.visually-hidden") %>%
  html_text()

注意事项

  • LinkedIn有反爬机制,频繁爬取可能触发IP封禁,建议控制请求频率,必要时模拟登录账号。
  • 页面CSS类名可能会随LinkedIn更新变化,若提取失效,需重新查看页面结构调整选择器。

内容的提问来源于stack exchange,提问作者Anis Boughanmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 12:30:58