rvest - select 只有 class 下的某些 href

rvest - select only certain hrefs under class

Objective

抓取指向零售店位置的文件路径向量,同时忽略超链接的电话号码。我刚开始使用 html 元素。

我试过的

library(rvest)
library(tidyverse)
library(xml2)

store.paths <- read_html("https://www.walmart.com/store/directory/al/alabaster") %>%
    html_nodes(xpath = '//*[@class="store-directory-container"]') %>% 
    html_nodes("a") %>% 
    html_attr('href') 

产生

[1] "/store/4756"      "tel:205-624-6229" "/store/423"       "tel:205-620-0360"

而我的期望输出是

[1] "/store/4756"  "/store/423"

我试过用storeBanner替换store-directory-container,结果是空的。

谢谢!

看起来您想要的 a 标签也有 class storeBanner 而电话链接没有。用

很容易抓住它们
store.paths <- read_html("https://www.walmart.com/store/directory/al/alabaster") %>%
  html_elements("a.storeBanner") %>% 
  html_attr('href') 

我在这种情况下还使用了 CSS 选择器语法,因为它更容易使用推荐的 html_elements 函数,因为 html_nodes 已被软弃用。您不能只用“storeBanner”替换“store-directory-container”,因为“a”标签位于“store-directory-container”下方,但在“storeBanner”的情况下,它是该元素,而不是子元素该元素的。

你可以在tag后添加一个带有storeBanner的xpath

store.paths <- read_html("https://www.walmart.com/store/directory/al/alabaster") %>%
  html_nodes(xpath = '//*[@class="store-directory-container"]') %>% 
  html_nodes("a") %>% 
  html_nodes(xpath = '//*[@class="storeBanner"]') %>% 
  html_attr('href') 

store.paths

[1] "/store/4756" "/store/423"