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

使用rvest爬取Airbnb评分及评论数失败,返回character(0)

Airbnb房源评分及评论数爬取失败的解决方法

问题根源

  • Airbnb采用动态内容渲染,评分、评论数这类核心数据是通过JavaScript异步加载的,静态read_html()只能获取页面初始的HTML源码,抓不到动态生成的内容。
  • 你使用的CSS选择器(._17p6nbba、span._s65ijh7)是平台自动生成的动态类名,这类类名会随页面更新频繁变化,很快就会失效。

可行解决方案

方案1:用RSelenium模拟浏览器加载动态内容

RSelenium能模拟真实浏览器的行为,等待页面完全加载后再抓取数据,步骤如下:

  1. 安装并加载依赖包:
install.packages("RSelenium")
library(RSelenium)
  1. 启动Chrome浏览器驱动(需确保Chrome版本与驱动版本匹配):
driver <- rsDriver(browser = "chrome", port = 4567L)
remDr <- driver[["client"]]
  1. 访问目标页面并等待加载完成:
url <- "https://www.airbnb.ae/rooms/585742764031233504?preview_for_ml=true&source_impression_id=p3_1660929108_esIxWS5HCyk890Im"
remDr$navigate(url)
Sys.sleep(5) # 等待时间可根据网络情况调整
  1. 用稳定的定位方式抓取数据(这里用XPath基于文本定位,比动态类名可靠):
# 获取平均评分
rating <- remDr$findElement(using = "xpath", value = "//div[contains(following-sibling::div, 'out of 5')]")$getElementText()[[1]]

# 获取评论数
review_count <- remDr$findElement(using = "xpath", value = "//span[contains(text(), 'reviews')]")$getElementText()[[1]]

# 输出结果
cat("平均评分:", rating, "\n")
cat("评论数:", review_count, "\n")
  1. 关闭浏览器驱动:
remDr$close()
driver$server$stop()

方案2:直接调用Airbnb的API接口

Airbnb加载房源数据时会调用后台API,直接请求API比模拟浏览器更高效,步骤如下:

  1. 打开目标页面,按F12打开开发者工具,切换到「Network」标签后刷新页面。
  2. 在搜索框输入review或rating,找到返回房源详情的API请求,复制其URL。
  3. 在R中用httr和jsonlite请求并解析数据:
install.packages(c("httr", "jsonlite"))
library(httr)
library(jsonlite)

# 替换为你找到的API地址
api_url <- "替换为实际API URL"
response <- GET(api_url)
data <- fromJSON(content(response, "text"))

# 从JSON结构中提取数据(具体路径需根据API返回调整)
average_rating <- data$review_details$average_rating
review_count <- data$review_details$total_reviews

cat("平均评分:", average_rating, "\n")
cat("评论数:", review_count, "\n")

注意事项

  • 避免使用动态生成的类名作为选择器,优先用XPath基于文本/固定属性定位,或直接调用API。
  • 爬取数据需遵守Airbnb的服务条款,控制请求频率,防止IP被封禁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:18:24