使用 R 语言从 PDF 文档中提取表格

本课程介绍了如何使用 R 语言从 WHO(世界卫生组织)的官网上下载新冠疫情的每日报告以及如何从这些报告中的表格里面提取数据。

下载所有的 PDF 报告

报告的下载地址为:https://www.who.int/emergencies/diseases/novel-coronavirus-2019/situation-reports/

这个非常简单,我的思路是直接获取网页中的所有 <a> 标签的 href 属性,然后过滤出链接中含 .pdf 的,最后再用一个循环下载所有的 PDF 文件即可。

library(rvest)
library(tidyverse)
read_html('https://www.who.int/emergencies/diseases/novel-coronavirus-2019/situation-reports/') -> html

# 创建 pdf 文件夹
dir.create("pdf")

html %>%
html_nodes("a") %>%
html_attr("href") %>%
as_tibble() %>%
dplyr::filter(str_detect(value, "\\.pdf")) %>%
mutate(value = paste0("https://www.who.int", value)) %>%
mutate(dest = str_match(value, "situation-reports/(.*)\\?")[,2],
dest = paste0("pdf/", dest)) %>%
distinct() -> links

for(i in 1:nrow(links)) {
download.file(links$value[i], links$dest[i])
}

运行上面的代码就可以把所有的报告下载到工作目录下面的 pdf 文件夹里面了。

从 PDF 里面提取表格数据

我选择了一个 PDF 做演示:20200523-covid-19-sitrep-124.pdf,下面使用 tabulizer 包进行数据提取,不过这个包依赖于 rJava 包,因此在使用这个包之前你需要在电脑上安装 Java 和在 R 里面安装 rJava 包。因为电脑系统的关系,我不好演示,大家可以自己研究下,不难的。我这里提供几个 tips,Java 安装之后可能还需要进行环境变量的配置。

install.packages('rJava')
  • tabulizer 包的安装:
install.packages("tabulizer")

更多内容欢迎加入课程学习~

点击这里跳转到 RStata 短书平台获取附件:使用 R 语言从 PDF 文档中提取表格

评论