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

使用R语言rvest、xml2包爬取招聘网站数据遇阻求助

问题原因

目标站点的职位列表由JavaScript动态渲染生成,rvest的read_html()仅能获取初始静态HTML源码,该源码不包含渲染完成后的职位节点,因此选择器正确也无法提取到对应数据。

解决方案

以下提供两种可行实现方式:

方案1:请求数据接口(效率更高)

站点的职位数据通过独立接口返回JSON格式内容,无需解析HTML,直接请求接口即可快速获取全量字段。
操作方式:

  • 打开浏览器开发者工具(F12),切换至「网络」标签,筛选「Fetch/XHR」分类
  • 刷新页面后找到加载职位数据的接口请求,直接构造该请求即可,返回数据用jsonlite解析后可直接提取所需字段
    参考代码:
library(httr)
library(jsonlite)
library(dplyr)

# 构造请求,接口地址可从开发者工具中复制
resp <- GET(
  "https://gehaltsreporter.de/api/v1/jobs?q=Immobilienkaufmann&page=1",
  add_headers(`User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36")
)
job_raw <- fromJSON(content(resp, as = "text"))
# 从返回的JSON结构中直接提取职位名称、公司、薪资等所有字段
job_list <- job_raw$data

方案2:模拟浏览器动态渲染

如果接口有反爬限制难以构造,可以使用RSelenium启动真实浏览器,等待页面渲染完成后再提取节点:
参考代码:

library(RSelenium)
library(rvest)
library(dplyr)

# 启动Chrome浏览器,chromever需与本地安装的Chrome版本一致
driver <- rsDriver(browser = "chrome", chromever = "118.0.5993.88")
remDr <- driver$client
remDr$navigate("https://gehaltsreporter.de/stellenangebote-jobs/?q=Immobilienkaufmann")
# 等待页面JS渲染完成
Sys.sleep(3)
# 获取渲染后的完整页面源码
page_src <- remDr$getPageSource()[[1]]
html <- read_html(page_src)

# 用你之前确认的选择器提取数据即可
job_titles <- html %>% html_nodes(".job-title") %>% html_text2()
companies <- html %>% html_nodes(".job-company") %>% html_text2()

# 操作完成后关闭浏览器进程
remDr$close()
driver$server$stop()

注意事项

  • 站点存在基础反爬机制,请求间隔建议设置为1秒以上,避免IP被临时封禁
  • 所有请求建议添加User-Agent头,模拟正常浏览器访问,降低被拦截概率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:45:03