首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Rvest嵌套列刮HTML表?

如何用Rvest嵌套列刮HTML表?
EN

Stack Overflow用户
提问于 2022-09-18 13:06:45
回答 1查看 84关注 0票数 3

在使用嵌套列报废HTML表时,我遇到了一个大问题。

这张桌子是香港入境事务处的。

这里显示了一个截图:

我试着用红背心做这件事,但结果很混乱。

代码语言:javascript
复制
library(rvest)
library(tidyverse)
library(stringr)
library(dplyr)

url_data <- "https://www.immd.gov.hk/eng/stat_20220901.html"

url_data %>%
read_html()
css_selector <- "body > section:nth-child(7) > div > div > div > div > table"
immiTable <- url_data %>% 
read_html() %>% html_element(css = css_selector) %>% html_table()
immiTable

我的目标是提取第一行(即机场)并将其绘制成饼图,生成整个表的数据,并将其保存到excel中。

我意识到,不嵌套表和废弃嵌套表的教材相当稀少。所以我需要你的指导。非常感谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-19 05:38:10

另一种选择是选择tbody行,按属性筛选隐藏项,然后稍后添加标头。

代码语言:javascript
复制
library(rvest)
library(tidyverse)

rows <- read_html("https://www.immd.gov.hk/eng/stat_20220901.html") %>% html_elements(".table-passengerTrafficStat tbody tr")
prefixes <- c("arr", "dep")
cols <- c("Hong Kong Residents", "Mainland Visitors", "Other Visitors", "Total")
headers <- c("Control_Point", crossing(prefixes, cols) %>% unite("headers", 1:2, remove = T) %>% unlist() %>% unname())

df <- map_dfr(
  rows,
  function(x) {
    x %>%
      html_elements("td[headers]") %>%
      set_names(headers) %>%
      html_text()
  }
) %>%
  mutate(across(c(-1), ~ str_replace(.x, ",", "") %>% as.integer()))

或者有点浓缩,

代码语言:javascript
复制
library(rvest)
library(tidyverse)

rows <- read_html("https://www.immd.gov.hk/eng/stat_20220901.html") %>% html_elements(".table-passengerTrafficStat tbody tr")
prefixes <- c("arr", "dep")
cols <- c("Hong Kong Residents", "Mainland Visitors", "Other Visitors", "Total")
headers <- c("Control_Point", crossing(prefixes, cols) %>% unite("headers", 1:2, remove = T) %>% unlist() %>% unname())

df <- map_dfr(rows, ~ set_names(.x %>% html_elements("td[headers]") %>% html_text(), headers)) %>%
  mutate(across(c(-1), ~ str_replace(.x, ",", "") %>% as.integer()))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73763025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档