使用R Studio爬取Airbnb数据遇NA及房源链接获取失败求助
解决rvest爬取Airbnb房源信息的问题
问题说明
用rvest包爬取Airbnb布鲁克林房源时,遇到两个核心问题:
- 用xpath
//div[contains(@itemprop, 'itemListElement')]抓取房源容器,返回长度为0的空列表 - 抓取class为
l1ovpqvx的a标签,仅得到/help/home?from=footer这类杂项链接,无法获取目标房源链接
问题原因
- Airbnb当前采用动态渲染机制,静态HTML中不会直接加载房源数据,你抓取的只是页面初始框架
- 页面中的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
相关产品推荐
相关产品推荐

