如何在R爬虫中为缺失地址的位置填充NA值?
黄页爬虫修改:处理无地址商家的NA填充问题
问题场景
从黄页爬取商家名称与地址时,使用基于rvest和dplyr的爬虫函数遇到报错:「Tibble列尺寸不兼容」。原因是部分商家无地址信息,直接批量提取名称和地址会导致两者长度不一致,例如Sudbury地区理发师搜索页面中存在无地址的商家。
修改思路
不再分别批量提取所有名称和地址,而是先定位每个商家的独立容器节点,再逐个从容器内提取名称和地址。若容器内无地址元素,则自动填充NA,逻辑类似SQL中的CASE WHEN。
修改后代码示例
library(rvest) library(dplyr) library(purrr) scrape_yellowpages <- function(url) { # 读取目标页面 page <- read_html(url) # 获取每个商家的容器节点 business_containers <- page %>% html_elements(".listing__content") # 遍历容器,逐个提取信息 map_dfr(business_containers, function(container) { # 提取商家名称 name <- container %>% html_element(".listing__name--link") %>% html_text2() # 提取地址,无地址则返回NA address <- container %>% html_element(".listing__address") %>% html_text2() address <- ifelse(is.na(address), NA_character_, address) tibble(barber = name, address = address) }) } # 测试调用 target_url <- "https://www.yellowpages.ca/search/si/1/barber/Sudbury+ON" scrape_result <- scrape_yellowpages(target_url) print(scrape_result)
期望输出示例
| barber | address | |
|---|---|---|
| 1 | barber111 | address111 |
| 2 | barber222 | address222 |
| 3 | barber333 | NA |
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

