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

使用rvest按指定CSS类爬取Waffle House门店信息失败求助

rvest按指定CSS类爬取Waffle House门店信息失败求助

嘿,我来帮你排查下问题!你现在的代码直接爬了首页,但仔细看这个网站的结构就会发现——首页只有州的列表,根本没有具体的门店信息,所以你自然抓不到css-dhj0hp这些类的元素啦😅。

要拿到门店的编号、地址这些信息,得先遍历每个州的页面,再进入单个门店的详情页才行。我给你写一套完整的流程,你可以试试:

第一步:加载依赖包

先确保你已经装了rvest和tidyverse,然后加载它们:

library(rvest)
library(tidyverse)

第二步:获取所有州的链接

从首页爬取每个州的跳转链接:

base_url <- "https://locations.wafflehouse.com"
home_page <- read_html(base_url)

# 提取所有州的链接并补全完整URL
state_links <- home_page |>
  html_nodes("a.directory-list-item-link") |>
  html_attr("href") |>
  paste0(base_url, .)

第三步:获取所有门店的详情页链接

遍历每个州的页面,提取该州下所有门店的详情页链接:

# 定义函数:从单个州页面提取门店链接
get_store_links <- function(state_url) {
  state_page <- read_html(state_url)
  store_links <- state_page |>
    html_nodes("a.directory-list-item-link") |>
    html_attr("href") |>
    paste0(base_url, .)
  return(store_links)
}

# 批量获取所有门店链接
all_store_links <- map(state_links, get_store_links) |>
  flatten_chr()

第四步:抓取单个门店的信息

定义函数来解析单个门店详情页,提取你需要的三个字段,还顺便把城市/州/邮编拆分开:

scrape_store_details <- function(store_url) {
  # 加个小延迟,避免给服务器太大压力
  Sys.sleep(0.5)
  
  store_page <- read_html(store_url)
  
  # 提取门店编号,去掉前缀只留数字
  store_num <- store_page |>
    html_node("div.css-dhj0hp") |>
    html_text(trim = TRUE) |>
    str_remove("Store #")
  
  # 提取街道地址
  street <- store_page |>
    html_node("div.css-8er82g") |>
    html_text(trim = TRUE)
  
  # 提取城市/州/邮编并拆分
  city_state_zip_raw <- store_page |>
    html_node("div.css-n2nvu7") |>
    html_text(trim = TRUE)
  
  # 拆分逻辑:先按逗号分城市和州+邮编,再按空格分州和邮编
  city_part <- str_split(city_state_zip_raw, ", ")[[1]][1]
  state_zip_part <- str_split(city_state_zip_raw, ", ")[[1]][2]
  state <- str_split(state_zip_part, " ")[[1]][1]
  zip <- paste(str_split(state_zip_part, " ")[[1]][-1], collapse = " ")
  
  # 返回结构化数据
  tibble(
    store_number = store_num,
    street_address = street,
    city = city_part,
    state = state,
    zip_code = zip
  )
}

第五步:批量抓取所有门店数据

最后用map_df批量处理所有门店链接,自动合并成数据框:

# 开启进度条方便查看进度
all_store_data <- map_df(all_store_links, scrape_store_details, .progress = TRUE)

# 看看结果
head(all_store_data)

这样应该就能拿到你想要的包含门店编号、街道地址、城市、州、邮编的数据框了!另外提醒下,爬取网站时尽量遵守网站的robots.txt规则,延迟时间可以根据情况调整,别太频繁请求哦。

备注:内容来源于stack exchange,提问作者pyll

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.21 14:58:02