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

使用R Studio爬取Airbnb数据遇NA及房源链接获取失败求助

解决rvest爬取Airbnb房源信息的问题

问题说明

用rvest包爬取Airbnb布鲁克林房源时,遇到两个核心问题:

  • 用xpath //div[contains(@itemprop, 'itemListElement')] 抓取房源容器,返回长度为0的空列表
  • 抓取class为l1ovpqvx的a标签,仅得到/help/home?from=footer这类杂项链接,无法获取目标房源链接

问题原因

  1. Airbnb当前采用动态渲染机制,静态HTML中不会直接加载房源数据,你抓取的只是页面初始框架
  2. 页面中的class名称是动态生成的,会随平台版本更新变化,依赖固定class的xpath自然失效

解决方案

Airbnb会把全量房源数据嵌入页面的__NEXT_DATA__脚本标签中,直接解析这个标签内的JSON数据,是无需依赖易变页面结构的可靠方式。

代码示例

library(rvest)
library(jsonlite)
library(httr)

# 设置符合浏览器的User-Agent,避免被反爬拦截
httr::set_config(httr::user_agent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"))

# 读取目标页面
page <- read_html("https://www.airbnb.com/s/brooklyn/homes?tab_id=home_tab")

# 提取包含全量数据的脚本标签
data_script <- html_nodes(page, xpath = "//script[@id='__NEXT_DATA__']") %>% html_text()

# 解析JSON格式数据
parsed_data <- fromJSON(data_script)

# 提取房源列表(路径需根据页面实际结构调整,以下为通用路径)
listings <- parsed_data$props$pageProps$searchResults$results

# 整理核心房源信息
result_df <- data.frame(
  房源ID = listings$id,
  房源链接 = paste0("https://www.airbnb.com/rooms/", listings$id),
  房源标题 = listings$listing$name,
  每晚价格 = paste0("$", listings$pricing$rate$amount)
)

# 查看结果
head(result_df)

注意事项

  • 若JSON路径失效,打开浏览器开发者工具(F12),查看__NEXT_DATA__的结构,调整对应提取路径
  • 严格遵守Airbnb的服务条款和robots.txt规则,控制爬取频率,避免触发反爬机制

内容的提问来源于stack exchange,提问作者bkef-code372

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:12:40