我正试图通过以下链接搜索密苏里州沃尔玛的位置:

https://www.walmart.com/store/finder?location=Missouri&distance=50

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

url <- read_html("https://www.walmart.com/store/finder?location=Missouri&distance=50")

我使用SelectorGadget判断NearbyStores中的内容,并使用它提取存储地址.

我想先把城市挖出来,但什么也没得到

url %>% html_elements(".city")
{xml_nodeset (0)}

然后我试图提取地址和存储类型,但仍然一无所获.

url %>% html_elements(".result-element-address")
{xml_nodeset (0)}
  
url %>% html_elements(".result-element-store-type")
{xml_nodeset (0)}

我正在try 创建一个包含城市名称和地址的数据框

推荐答案

您要查找的标记在您请求的文档中不存在.它是在页面加载后由javascript代码动态构建的.幸运的是,页面上确实存在实际数据,在其中一个脚本标记中以json字符串的形式存在.这需要进行一些分析,但包含您需要的所有信息:

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

url <- read_html("https://www.walmart.com/store/finder?location=Missouri&distance=50")
stores <- html_element(url, xpath = "//script[@id='storeFinder']") %>% 
  html_text() %>%
  jsonlite::parse_json()
  
do.call(rbind, lapply(stores$storeFinder$storeFinderCarousel$stores, 
       function(x) as.data.frame(x$address)))
#>    postalCode                 address           city state country
#> 1       65401        500 S Bishop Ave          Rolla    MO      US
#> 2       65584   185 Saint Robert Blvd   Saint Robert    MO      US
#> 3       65453            100 Ozark Dr           Cuba    MO      US
#> 4       65560       1101 W Highway 32          Salem    MO      US
#> 5       65066         1888 Highway 28     Owensville    MO      US
#> 6       63080       350 Park Ridge Rd       Sullivan    MO      US
#> 7       65101      401 Supercenter Dr Jefferson City    MO      US
#> 8       65065         4252 Highway 54    Osage Beach    MO      US
#> 9       65483 1433 S Sam Houston Blvd        Houston    MO      US
#> 10      65109   724 Stadium West Blvd Jefferson City    MO      US
#> 11      65026      1802 S Business 54          Eldon    MO      US
#> 12      65020             94 Cecil St      Camdenton    MO      US
#> 13      65536    1800 S Jefferson Ave        Lebanon    MO      US

Html相关问答推荐

Blazor中有1像素高行的表格

为所有必填字段添加所需的占位符文本(Angular Material)

创建带有弯曲边框的水平时间线

这<;td&>如何溢出<;表>;?

根据按钮位置左/右对齐按钮

如何创建剪切到路径的循环文本字幕?

渐变进度条位置

使具有FLEX父项的溢出自动的子元素收缩

将精选选项的价格合并为一个价格HTML、PHP和JQuery

Flex:第一个 div 有列,下一个 div 有行

在DIV上应用梯度模糊未如预期工作

如何为Vuetify输入控件减小标签和字段之间的间距?

主要元素内滚动时,固定导航栏会消失

从 Vue 应用程序的容器元素渲染 HTML

具有 css 高度的输入元素:100% 溢出父 div

pull-right 不适用于 bootstrap alert 内的按钮

为什么在使用src与srcdoc时 iframe 内容高度呈现不同?

提交前的验证表单未显示任何验证消息?

Tailwind CSS 复选框样式不起作用

表格布局:固定;文本溢出单元格时不起作用