【问题标题】:tips for reestablishing columns of a scraped web pdf重新建立抓取的网络 pdf 列的提示
【发布时间】:2019-06-12 19:29:38
【问题描述】:

我无法抓取此网络 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 的情况下完全不同地抓取)?一旦建立了列,我想我就可以格式化/整理数据。谢谢。

【问题讨论】:

标签: r tidyverse rvest


【解决方案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。您必须自己添加列标题。您可能还想删除逗号并将列更改为数字。

【讨论】:

  • 不知何故两天后它不再工作,我无法调试 - Error in read.table(text = substring(rawtext, regexpr(start, rawtext), : no lines available in input 。我认为源结构/格式可能发生了变化,但至少看起来仍然有相同的边界 n 1 和 n TOTALS(即使它们在此评论中略微自动重新格式化)
  • 谢谢@cory。它现在也适用于我,在我的工作计算机上(而不是周末从我的家用计算机上),所以它让我认为可能存在我们没有列出的另一个库依赖项,或者源文本/文本格式可以改变轻微的,现在又恢复了原来的样子。我今晚会在家里的电脑上再试一次,然后回来报告。也就是说——还有一个问题——你能详细说明一下为startend 添加/r 前缀吗?我在rawtext 中没有看到它,也无法解释我们为什么需要它。
  • 所以,也许它是 R/RStudio/library 的版本,但是在一台机器上为 rawtext 我看到 \r\n 之前的 startend 区域(如上面的答案)和其他\r 不可见。好奇是否有人知道为什么?如果我只是删除 \r 代码在两台机器上都可以工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-10
  • 2019-02-02
  • 2017-11-14
  • 2016-02-06
  • 1970-01-01
相关资源
最近更新 更多