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

使用rvest::read_html爬取fincaraiz网页无法获取完整HTML及提取href失败

问题原因

目标页面采用*客户端动态渲染(CSR)*机制,你在浏览器检查元素里看到的完整DOM结构,是浏览器加载初始静态HTML后,通过JavaScript异步请求后台接口、动态生成的内容。rvest仅支持抓取初始静态HTML,无法解析执行JS生成动态内容,因此只能拿到不包含列表数据的基础HTML代码,自然提取不到对应href属性。

解决方案

有两种常见的解决路径,优先推荐第一种,效率更高:

方法1:直接调用后台数据接口

  • 打开浏览器开发者工具(F12),切换到「网络」标签,筛选Fetch/XHR类请求,刷新页面后逐一查看请求返回结果,就能找到返回房产列表数据的后台接口
  • 直接请求该接口获取结构化JSON数据,不需要解析HTML,提取效率更高,也更稳定

方法2:使用支持JS渲染的工具加载页面

如果找不到可用接口,或需要获取渲染后的完整DOM结构,可以使用支持JS执行的无头浏览器工具加载页面,再用rvest解析,以下是chromote包的示例代码:

# 安装依赖包(首次使用需执行)
# install.packages("chromote")
# install.packages("rvest")
library(chromote)
library(rvest)

# 启动无头浏览器实例
b <- ChromoteSession$new()
# 加载目标页面
b$Page$navigate("https://www.fincaraiz.com.co/apartamentos-casas/venta/medellin?usado=true&pagina=1")
# 等待页面动态渲染完成,可根据网络情况调整等待时长
Sys.sleep(3)

# 获取渲染完成的完整HTML代码
full_html <- b$Runtime$evaluate("document.documentElement.outerHTML")$result$value %>% 
  read_html()

# 提取目标href属性
href_result <- full_html %>%
  html_elements("div article a") %>%
  html_attr("href")

# 关闭浏览器实例
b$close()
注意事项
  • 控制请求频率,避免短时间内发起大量请求触发网站反爬机制
  • 遇到反爬限制时,可通过添加自定义请求头、设置随机等待间隔等方式规避

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 03:06:03