Skip to Content

R语言拍了拍PDF,说你的表格型数据也归我管

上午遇到一个可爱的妹子被实习老板差遣去做苦力,从 PDF 中提取表格转化为 excel。这我当然不能忍,抄起键盘就抡了过去,啊不,是召唤出了 R 语言。

数据来源是 https://www.chinacoal-safety.gov.cn/xw/zt/2018zt/mkscnlgl/index.shtml

install.packages(c("tabulizer", "magrittr", "tibble", "stringr", "dplyr", "openxlsx"))

library(magrittr)
url <- "https://www.chinacoal-safety.gov.cn/xw/zt/2018zt/mkscnlgl/gsfmkscnlgg/201803/P020200310587872852488.pdf"
mat <- tabulizer::extract_tables(url) %>% do.call(rbind, .)
tibble::as_tibble(mat[-1,]) %T>% {colnames(.) <- stringr::str_remove(mat[1,], "\\r")} %>% 
  dplyr::mutate(dplyr::across(dplyr::everything(), ~stringr::str_remove(., "\\r"))) %>% 
  openxlsx::write.xlsx("~/Downloads/广西.xlsx")

效果大概是这样:

# A tibble: 19 x 5
   序号  煤矿名称                                     `生产能力(万吨/年)` 安全生产许可证编号                   所在地址                
   <chr> <chr>                                        <chr>               <chr>                                <chr>                   
 1 "1"   南宁市白马矿业投资有限责任公司白马露天煤矿   10                  "(桂)MK安许证字〔2008〕001号Y3"      "南宁市隆安县"          
 2 "2"   上林县祥龙矿业实业有限公司那良斜井           9                   "(桂)MK安许证字〔2006〕020号Y1"      "南宁市上林县"          
 3 "3"   广西东怀矿业有限责任公司东怀煤矿一号井       150                 "(桂)MK安许证字〔2006〕005号Y4B1"    "百色市右江区"          
 4 "4"   广西壮族自治区右江矿务局有限公司保群煤矿     90                  "(桂)MK安许证字〔2016〕009号Y1B4"    "百色市田东县"          
 5 "5"   广西壮族自治区右江矿务局塘内矿               60                  "(桂)MK安许证字〔2016〕001号Y3B1"    "百色市田东县"          
 6 "6"   广西壮族自治区右江矿务局有限公司水埠矿       45                  "(桂)MK安许证字〔2017〕001号"        "百色市右江区"          
 7 "7"   广西壮族自治区右江矿务局有限公司州景矿       33                  "(桂)MK安许证字〔2005〕020Y4B2"      "百色市田东县"          
 8 "8"   广西百色那荷矿业有限责任公司那荷煤矿         30                  "(桂)MK安许证字[2014]004号Y1B2"      "百色市右江区"          
 9 "9"   广西壮族自治区右江矿务局有限公司公篓矿跃进矿 15                  "(桂)MK安许证字〔2005〕023号Y4B2"    "百色市右江区"          
10 "10"  广西壮族自治区右江矿务局有限公司林场煤矿     15                  "(桂)Mk安许证字〔2008〕003号Y3B2"    "百色市田阳县"          
11 "11"  广西百色福禄矿业有限责任公司福禄煤矿         45                  "(桂)Mk安许证字[2019]001号"          "百色市右江区"          
12 "12"  广西环江下金煤业有限责任公司下金矿           21                  "(桂)MK安许证字[2015]002号Y1"        "河池市环江毛南族自治县"
13 "13"  广西环江红山朝阳煤业有限公司朝阳矿           15                  "(桂)MK安许证字[2005]013号Y4B7"      "河池市环江毛南族自治县"
14 "14"  广西罗城伟隆煤业有限公司北陵山煤矿一号井     9                   "(桂)MK安许证字[2012]002号Y2B2"      "河池市罗城仫佬族自治县"
15 "15"  广西罗城伟隆煤业有限公司北崖煤矿             9                   "(桂)MK安许证字[2014]002号Y1B3"      "河池市罗城仫佬族自治县"
16 "16"  广西合山煤业有限责任公司三矿(石村二号井)     90                  "(桂)MK安许证字[2005]030号Y5"        "来宾市合山市"          
17 "17"  广西合山煤业有限责任公司河里洛山井           30                  "(桂)MK安许证字[2016]007号Y1B2"      "来宾市合山市"          
18 "18"  宁明县大明矿业有限责任公司大闸露天煤矿       10                  "(桂)MK安许可证字 〔2016〕019号Y1B2" "崇左市宁明县"          
19 ""    合计(18处)                                   686                 ""                                   ""                      

上面是广西省的例子,批量处理其它省份也不难,从网页中提取出 url 和省份名称的对应关系就好了。不过剩下的事还是交给这位同学自己吧,毕竟这是她的实习1

由衷地感受到当年能遇到 R 语言真是太幸运了。


  1. 我当然不会告诉你其实是我懒得弄了。↩︎