0

我正在尝试从下面的屏幕截图中抓取“1,335,000”(数字在屏幕截图的底部)。我在 R 中编写了以下代码。

t2<-read_html("https://fortune.com/company/amazon-com/fortune500/")
employee_number <- t2 %>% 
  rvest::html_nodes('body') %>% 
  xml2::xml_find_all("//*[contains(@class, 'info__value--2AHH7')]") %>% 
  rvest::html_text()

但是,当我调用“employee_number”时,它给了我“character(0)”。谁能帮我弄清楚为什么?

在此处输入图像描述

4

2 回答 2

1

script数据是从标签动态加载的。无需花费浏览器。您可以提取 中的整个 JavaScript 对象script,传递jsonlite给以处理为 JSON,然后提取您想要的内容,或者,如果只是在员工计数之后,从响应文本中将其正则表达式。

library(rvest)
library(stringr)
library(magrittr)
library(jsonlite)

page <- read_html('https://fortune.com/company/amazon-com/fortune500/')

data <- page %>% html_element('#preload') %>% html_text() %>% 
  stringr::str_match(. , "PRELOADED_STATE__ = (.*);") %>% .[, 2] %>% jsonlite::parse_json()

print(data$components$page$`/company/amazon-com/fortune500/`[[6]]$children[[4]]$children[[3]]$config$employees)

#shorter version
print(page %>%html_text() %>% stringr::str_match('"employees":"(\\d+)?"') %>% .[,2] %>% as.integer() %>% format(big.mark=","))
于 2021-12-04T18:44:22.130 回答
1

由于 Dave2e 指出页面使用javascript,因此无法使用rvest

url = "https://fortune.com/company/amazon-com/fortune500/"
#launch browser 
library(RSelenium)
driver = rsDriver(browser = c("firefox"))
remDr <- driver[["client"]]
remDr$navigate(url)

remDr$getPageSource()[[1]] %>% 
  read_html() %>% html_nodes(xpath = '//*[@id="content"]/div[5]/div[1]/div[1]/div[12]/div[2]') %>% 
  html_text()
[1] "1,335,000"
于 2021-12-04T16:06:50.310 回答