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

使用R爬取Craigslist:CSS选择器无法获取面积与卧室数

解决Craigslist爬取中面积和卧室数返回NA的问题

核心原因

Craigslist的HTML结构经常迭代,你用的.post-bedrooms和.post-sqft类名大概率已经被移除或替换了。目前绝大多数租房房源的卧室数、面积信息是打包放在同一个HTML元素里的,而非单独对应你用的类选择器。

验证方法

打开目标Craigslist租房页面,按F12调出开发者工具,随便找一条房源查看其户型面积对应的HTML标签:

通常会看到类似 <span class="housing">2br - 1000ft2</span> 或者 <div class="attrgroup"><span>2 bedrooms</span><span>1000 sqft</span></div> 的结构,根本找不到.post-bedrooms或.post-sqft的类。

修正后的代码示例

用rvest配合正则表达式提取打包在.housing里的信息:

library(rvest)
library(dplyr)
library(stringr)

# 替换成你目标城市的Craigslist租房页面URL
target_url <- "https://portland.craigslist.org/search/apa"
page_content <- read_html(target_url)

# 提取基础信息(标题、价格)
rent_data <- tibble(
  title = page_content %>% html_elements(".titlestring") %>% html_text(),
  price = page_content %>% html_elements(".price") %>% html_text() %>% parse_number()
)

# 提取户型面积的原始文本
housing_raw <- page_content %>% html_elements(".housing") %>% html_text() %>% str_squish()

# 从原始文本中拆分卧室数和面积
rent_data <- rent_data %>%
  mutate(
    # 处理卧室数:匹配数字+br,同时兼容Studio户型
    bedrooms = case_when(
      str_detect(housing_raw, "Studio") ~ 0,
      str_detect(housing_raw, "\\d+br") ~ as.numeric(str_extract(housing_raw, "\\d+(?=br)")),
      TRUE ~ NA_real_
    ),
    # 处理面积:匹配数字+ft2
    sqft = str_extract(housing_raw, "\\d+(?=ft2)") %>% as.numeric()
  )

print(rent_data)

额外说明

  • 部分房源可能未填写面积或卧室数,这类情况返回NA是正常的,并非代码问题。
  • 如果你的目标页面结构和上述示例不同,再用开发者工具定位具体元素,调整html_elements里的选择器即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 19:31:03