如何使用 Rvest 抓取带有嵌套列的 HTML 表格?

2024-04-06

我在废弃带有嵌套列的 HTML 表时遇到了一个大问题。

该表来自于香港入境事务处 https://www.immd.gov.hk/eng/stat_20220901.html.

屏幕截图如下所示:

我尝试用 rvest 来做,但结果很混乱。

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。

我意识到取消嵌套表和废弃嵌套表的教材相当缺乏。因此我需要你的指导。非常感谢您的帮助。


这是一个方法。标头格式使事情变得复杂,但下面的代码可以工作。它提取整个表,而不仅仅是第一行。

suppressPackageStartupMessages({
  library(rvest)
  library(dplyr)
  library(ggplot2)
})

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

page <- url_data %>% read_html()

page %>%
  html_elements("[headers='Arrival']") %>%
  html_text() %>%
  paste("Arrival", .) -> col_names
page %>%
  html_elements("[headers='Departure']") %>%
  html_text() %>%
  paste("Departure", .) %>%
  c(col_names, .) -> col_names
page %>%
  html_elements("[headers='Control_Point']") %>%
  html_text() -> row_names
page %>%
  html_elements("[class='hRight']") %>%
  html_text() %>%
  sub(",", "", .) %>%
  as.numeric() %>%
  matrix(nrow = length(row_names), byrow = TRUE) %>%
  as.data.frame() %>%
  setNames(col_names) %>%
  `row.names<-`(row_names) -> final

final
#>                                Arrival Hong Kong Residents
#> Airport                                               4258
#> Express Rail Link West Kowloon                           0
#> Hung Hom                                                 0
#> Lo Wu                                                    0
#> Lok Ma Chau Spur Line                                    0
#> Heung Yuen Wai                                           0
#> Hong Kong-Zhuhai-Macao Bridge                          333
#> Lok Ma Chau                                              0
#> Man Kam To                                               0
#> Sha Tau Kok                                              0
#> Shenzhen Bay                                          3404
#> China Ferry Terminal                                     0
#> Harbour Control                                          0
#> Kai Tak Cruise Terminal                                  0
#> Macau Ferry Terminal                                     0
#> Total                                                 7995
#>                                Arrival Mainland Visitors Arrival Other Visitors
#> Airport                                             1488                    422
#> Express Rail Link West Kowloon                         0                      0
#> Hung Hom                                               0                      0
#> Lo Wu                                                  0                      0
#> Lok Ma Chau Spur Line                                  0                      0
#> Heung Yuen Wai                                         0                      0
#> Hong Kong-Zhuhai-Macao Bridge                         28                     39
#> Lok Ma Chau                                            0                      0
#> Man Kam To                                             0                      0
#> Sha Tau Kok                                            0                      0
#> Shenzhen Bay                                         348                     37
#> China Ferry Terminal                                   0                      0
#> Harbour Control                                        0                      0
#> Kai Tak Cruise Terminal                                0                      0
#> Macau Ferry Terminal                                   0                      0
#> Total                                               1864                    498
#>                                Arrival Total Departure Hong Kong Residents
#> Airport                                 6168                          3775
#> Express Rail Link West Kowloon             0                             0
#> Hung Hom                                   0                             0
#> Lo Wu                                      0                             0
#> Lok Ma Chau Spur Line                      0                             0
#> Heung Yuen Wai                             0                             0
#> Hong Kong-Zhuhai-Macao Bridge            400                           243
#> Lok Ma Chau                                0                             0
#> Man Kam To                                 0                             0
#> Sha Tau Kok                                0                             0
#> Shenzhen Bay                            3789                          1301
#> China Ferry Terminal                       0                             0
#> Harbour Control                            0                             0
#> Kai Tak Cruise Terminal                    0                             0
#> Macau Ferry Terminal                       0                             0
#> Total                                  10357                          5319
#>                                Departure Mainland Visitors
#> Airport                                               1154
#> Express Rail Link West Kowloon                           0
#> Hung Hom                                                 0
#> Lo Wu                                                    0
#> Lok Ma Chau Spur Line                                    0
#> Heung Yuen Wai                                           0
#> Hong Kong-Zhuhai-Macao Bridge                          194
#> Lok Ma Chau                                              0
#> Man Kam To                                               0
#> Sha Tau Kok                                              0
#> Shenzhen Bay                                           524
#> China Ferry Terminal                                     0
#> Harbour Control                                          0
#> Kai Tak Cruise Terminal                                  0
#> Macau Ferry Terminal                                     0
#> Total                                                 1872
#>                                Departure Other Visitors Departure Total
#> Airport                                             315            5244
#> Express Rail Link West Kowloon                        0               0
#> Hung Hom                                              0               0
#> Lo Wu                                                 0               0
#> Lok Ma Chau Spur Line                                 0               0
#> Heung Yuen Wai                                        0               0
#> Hong Kong-Zhuhai-Macao Bridge                        15             452
#> Lok Ma Chau                                           0               0
#> Man Kam To                                            0               0
#> Sha Tau Kok                                           0               0
#> Shenzhen Bay                                         28            1853
#> China Ferry Terminal                                  0               0
#> Harbour Control                                       0               0
#> Kai Tak Cruise Terminal                               0               0
#> Macau Ferry Terminal                                  0               0
#> Total                                               358            7549

Created on 2022-09-18 with reprex v2.0.2 https://reprex.tidyverse.org


绘制饼图ggplot绘制条形图,然后更改为极坐标。

Airport <- final[1,,]
Airport %>%
  t() %>%
  as.data.frame() %>%
  mutate(`Arrival/Departure` = row.names(.)) %>%
  ggplot(aes("", Airport, fill = `Arrival/Departure`)) +
  geom_col(width = 1) +
  scale_fill_manual(values = RColorBrewer::brewer.pal(n = 8, name = "Spectral")) +
  coord_polar(theta = "y", start = 0) +
  theme_void()

Created on 2022-09-18 with reprex v2.0.2 https://reprex.tidyverse.org

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Rvest 抓取带有嵌套列的 HTML 表格? 的相关文章

随机推荐

  • Fiddler 不解压缩 gzip 响应

    I use Fiddler调试我的应用程序 每当服务器压缩响应而不是解压缩响应时 Fiddler 都会显示不可读的二进制数据 Response to my request POST HTTP 1 1 200 OK Server xyz co
  • linq to sql loadwith 与 Associatewith

    loadwith 和 Associatewith 之间有什么区别 从我读到的文章看来 loadwith 用于加载附加数据 例如客户的所有订单 而AssociateWith用于过滤数据 这是正确的理解吗 如果有人可以用基于示例的解释来解释这一
  • Laravel 4:发布包的资产

    如何发布包资源 我在这里找到了一个教程 http laravel recipes com recipes 279 http laravel recipes com recipes 279 但是当我尝试从工作台发布资产时 出现以下错误 Run
  • PHP、MySQL:接收电子邮件,在数据库中自动搜索并根据结果发送电子邮件

    访客可以通过联系表联系工作人员 访客还需要提交电子邮件 这将存储在数据库中 现在考虑到工作人员回复此消息 工作人员的回复将直接发送到访客的电子邮件中 假设用户想要跟进工作人员发送的消息 我希望访问者只需点击电子邮件服务中的回复按钮 然后向我
  • 标准化整数与浮点的转换

    我需要将标准化整数值与实际浮点值相互转换 例如 对于 int16 t 值 1 0 用 32767 表示 1 0 用 32768 表示 尽管对每个整数类型 有符号和无符号 执行此操作有点乏味 但手动编写仍然很容易 然而 我想尽可能使用标准方法
  • 增加 Java 中主题的分区数量

    我正在使用名称 卡夫卡 2 12版本 2 3 0 根据我想更改的流量 负载最大分区某个主题的编号 Kafka启动后是否可以进行这种更改 并且可以通过代码完成吗 是的 您可以通过代码增加分区 使用AdminClient createParti
  • Android 当主题为深色时更改品牌启动背景颜色

    我在我的应用程序中实现了深色主题 一切正常 当系统处于深色模式时 应用程序也处于深色模式 反之亦然 问题是品牌启动 我有 2 个可绘制文件 Dark
  • 如何使用 ruby​​ 通过 ssl 通过 smtp 发送邮件(不使用 Rails,gmail 没有 TLS)

    我想要的只是使用 SSL 通过 SMTP 从我的 ruby 脚本发送电子邮件 我只找到了从 Rails 或使用 TLS 的 Gmail 执行此操作的示例 我发现人们谈论 ruby 1 8 5 的 SMTPS 支持 但是libdoc http
  • 显示没有索引的 pandas 数据框

    我想在没有索引列的情况下显示此数据框 我正在使用制表模块来更好地可视化数据 但不想在这里看到索引 我在 dftabulate 中尝试了index False 但它不接受这个参数 import pandas as pd from tabula
  • 如何在 jasper 报告中将文本字段旋转 90 度?

    我正在使用 iReport 设计器创建一些报告 在生成报告时 我遇到一个要求 必须以 90 度旋转显示静态文本字段 标签 如下图所示 我在互联网上搜索以获得解决方案 我发现 jaspersoft 不支持文本字段旋转 我在解决方案中读到了这个
  • 从 Admin SDK 调用 Firebase Callable Cloud 函数

    我有一个 Firebase 云函数 我想创建一个可调用函数 以便我可以从内置身份验证的 Web 客户端调用它 但我也想使用 Admin SDK 从我自己的后端代码调用它 特别是来自 Java 如果这很重要的话 我看到协议已记录 https
  • 在 Android 中的 Fragment 中使用 Google 地图

    我正在尝试在片段中加载 Google 地图 无论我尝试实现什么解决方案 我都会不断收到相同的错误 我已经解决了所有类似 如果不相同 的问题 并尝试按照前几个最佳答案的建议进行操作 但遗憾的是没有运气 因此 如果您能帮助我 我将不胜感激 我的
  • java 中像 read() 这样的 I/O 方法如何将线程置于阻塞状态?

    因此 如果我理解正确的话 当我们对对象调用 wait 时 线程会进入等待状态 而当它等待对象上的锁时 例如尝试进入同步块或方法时 线程会进入阻塞状态 像 read 这样的 I O 方法如何将线程置于阻塞状态 我理解为什么它必须处于阻塞状态
  • OpenGL - 固定管线着色器默认值(使用着色器模仿固定管线)

    谁能给我提供类似于固定功能管道的着色器 我最需要默认的片段着色器 因为我在网上找到了类似的顶点着色器 但如果你有一双应该没问题 我想使用固定管道 但具有着色器的灵活性 因此我需要类似的着色器 以便我能够模仿固定管道的功能 非常感谢 我是新来
  • 基本 javascript 警报在英特尔 XDK 代码编辑器中不起作用

    我正在从一个新的空白英特尔项目开始 我什至还没有开始编码 我只是设置文件树并确保 html 和 javascript 页面通过正确的锚点和脚本路径连接 但我的第一个 js 文件无法工作 我提供了测试代码和错误的屏幕截图 我知道语法是正确的
  • tkinter 中的框架未彼此堆叠

    我在 tkinter 中将 页面 堆叠在一起时遇到问题 我有一个主Frame包含两个子帧 两个子帧都包含不同的信息 第一个子帧包含Listbox和几个按钮 位于主框架的左侧 第二个框架应该包含不同的 页面 现在有两个 并让它们填满整个框架
  • 重定向到 HTTP 非 www 到 HTTPS www htaccess

    我想使用 HTTPS 协议从任何方向重定向到我们的网站 但有些重定向不起作用 我要这个 http www site co TO https www site co http site co TO https www site co 这是我的
  • 如何在同一页面(列表/创建)MVC3中使用@model IEnumerable<>和@model<>

    假设我有一个 Location 类 并且我正在使用 MVC3 创建一个脚手架列表 index cshtml 索引 html 页面使用 model IEnumerable 如果我想向列表中添加新位置 请按 创建 然后使用 model Proj
  • Android - 如何确定调用应用程序的包名称

    我最近遇到了这个问题 我找不到在我的活动中调用应用程序的包名称的方法 如果调用应用程序使用startActivityForResult 那就没问题了 我可以信赖Activity getCallingPackage 获取调用者的包名 但是当调
  • 如何使用 Rvest 抓取带有嵌套列的 HTML 表格?

    我在废弃带有嵌套列的 HTML 表时遇到了一个大问题 该表来自于香港入境事务处 https www immd gov hk eng stat 20220901 html 屏幕截图如下所示 我尝试用 rvest 来做 但结果很混乱 libra