重建刮取的网页pdf列的技巧

时间:2019-06-12 19:29:38

标签: r tidyverse rvest

我在抓取此网络pdf表时遇到了问题:

https://www.usbr.gov/mp/cvo/vungvari/milfln.pdf

变成data.frame。这是我到目前为止的内容:

library(pdftools)
df <- "https://www.usbr.gov/mp/cvo/vungvari/milfln.pdf"
df  <- pdf_text(df)

从这里开始,似乎所有数据都已被擦除,但是列结构丢失了。有什么推荐的方法可以重新建立列(或完全不用pdftools进行刮擦)?一旦建立了列,我想我就可以格式化/整理数据了。谢谢。

1 个答案:

答案 0 :(得分:1)

您的代码以文本形式返回pdf。桌子在那儿,你只需要把它拿出来。

library(pdftools)
file <- "https://www.usbr.gov/mp/cvo/vungvari/milfln.pdf"
rawtext  <- pdf_text(file)

start <- "\r\n    1"
end <- "\r\n  TOTALS"
df <- read.table(text=substring(rawtext, regexpr(start, rawtext), regexpr(end, rawtext)))
> head(df)
  V1     V2     V3     V4      V5      V6     V7     V8    V9     V10    V11    V12    V13
1  1 41,633 18,956 86,010 100,117 121,958 24,176 40,473 3,739 437,062 +1,443   +728  6,904
2  2 41,867 20,547 86,241 100,249 122,481 24,282 40,635 3,715 440,017 +2,955 +1,490  6,874
3  3 42,212 22,371 86,148 100,249 122,882 23,753 40,841 3,739 442,195 +2,178 +1,098  8,201
4  4 43,002 25,223 86,460 100,396 123,395 23,734 41,059 3,722 446,991 +4,796 +2,418  9,363
5  5 44,225 29,253 86,923 100,601 123,804 23,602 41,356 3,680 453,444 +6,453 +3,253 11,137
6  6 45,978 34,036 87,529 101,234 123,954 23,548 41,642 3,643 461,564 +8,120 +4,094 12,288
     V14     V15
1  7,632 1,554.8
2  8,364 1,571.4
3  9,299 1,589.8
4 11,781 1,613.2
5 14,390 1,641.7
6 16,382 1,674.2

regexpr返回startend所在的字符串中的索引。 substring使用这些索引将文本限制为仅表格。然后read.table将文本格式化为data.frame。您必须自己添加列标题。您可能还希望删除逗号并将列更改为数值。