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

R脚本抓取otodom.pl房产数据时XPath仅返回6条结果的原因?

问题分析与解决办法

你遇到的情况,大概率是以下原因导致的:

1. 页面采用动态懒加载,静态爬取仅能获取初始渲染内容

otodom.pl这类房产网站常用懒加载机制——页面首次加载只渲染前6条房源,剩余30条需要触发滚动或JS事件才会加载。你用rvest这类静态爬取工具(或XPath Playground直接解析静态HTML),只能拿到页面初始渲染的内容,自然只能得到6条结果。

2. 动态生成的CSS类名存在差异

你使用的css-qch36y e1n6ljqa6这类带随机后缀的类名,通常由CSS-in-JS框架生成,可能仅前6条房源的标题h3使用该类,后续加载的房源标题类名已发生变化,或节点结构不同。

解决思路

方法一:使用支持JS渲染的爬取工具

在R中可以用chromote或RSelenium模拟浏览器行为,让页面完整加载所有房源后再解析:

library(chromote)
# 启动浏览器会话
b <- ChromoteSession$new()
# 访问目标页面
b$Page$navigate("https://www.otodom.pl/pl/oferty/sprzedaz/mieszkanie/krakow?distanceRadius=0&page=1&limit=36&by=DEFAULT&direction=DESC&viewType=listing")
# 等待页面初始加载完成
b$Page$waitForLoadEvent()
# 模拟滚动到底部触发懒加载
b$Runtime$evaluate("window.scrollTo(0, document.body.scrollHeight);")
Sys.sleep(2) # 预留加载时间
# 获取完整页面HTML
html <- b$Page$getDocument()$result$root$children[[1]]$outerHTML
# 解析标题
library(rvest)
titles <- read_html(html) %>% 
  html_elements(xpath = "//h3[contains(@class, 'e1n6ljqa6')]/text()") %>% 
  html_text()

方法二:直接调用网站API接口

打开浏览器开发者工具(F12),切换到Network标签,刷新页面后查找XHR/fetch请求,会发现网站实际通过API接口获取房源数据(多为JSON格式)。直接请求API比爬HTML更高效,也能避免加载问题:

library(httr)
library(jsonlite)
# 构造API请求参数
url <- "https://www.otodom.pl/api/v1/offers"
params <- list(
  distanceRadius = 0,
  page = 1,
  limit = 36,
  by = "DEFAULT",
  direction = "DESC",
  viewType = "listing",
  city = "krakow",
  type = "mieszkanie",
  transaction = "sprzedaz"
)
# 发送请求并解析数据
response <- GET(url, query = params)
data <- fromJSON(content(response, "text"))
# 提取所需字段
titles <- data$items$title
prices <- data$items$price$value
per_sqm_prices <- data$items$price$perSqm
areas <- data$items$area

方法三:优化XPath表达式

如果坚持静态爬取,可换用更稳定的定位逻辑,比如避开动态类名,使用语义化属性或父级稳定类:

//div[contains(@class, 'offer-item')]//h3/text()

或匹配类名的固定部分:

//h3[contains(@class, 'e1n6ljqa6')]/text()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 02:23:00