使用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
相关产品推荐
相关产品推荐

