使用R的Webscrap复杂表

cigdeys3  于 2023-02-01  发布在  其他
关注(0)|答案(1)|浏览(107)

我已经尝试了几乎所有我知道的网页抓取从以下链接https://static-content.springer.com/esm/art%3A10.1038%2Fnplants.2016.167/MediaObjects/41477_2016_BFnplants2016167_MOESM277_ESM.pdf,补充表8,从第26页。我还没有设法做到这一点
达达帕斯塔
里维斯特
以及

read.table(text="copy paste")

我想有你的意见,就如何从网上搜集复杂的表格。任何帮助或建议,不胜感激
如果你不能打开链接,请写评论,我会找到一个替代品

huwehgph

huwehgph1#

这里有一个使用pdftools的可能解决方案。注意as_tibble是不必要的,我只使用它来进行漂亮的打印。

备注:看一下pdf,补充表8在第27页而不是第26页,所以我不知道你是想要第26页的表7还是第27页的表8(代码做第二个)。尽管如此,在你方便的时候编辑代码。matches regexp也是如此:它与所述表格的行匹配。

library(pdftools)
#> Using poppler version 22.04.0

url <- "https://static-content.springer.com/esm/art%3A10.1038%2Fnplants.2016.167/MediaObjects/41477_2016_BFnplants2016167_MOESM277_ESM.pdf"

lines <- pdf_text(url) |> strsplit("\n") |> unlist()   # suppresWarnings if you want

from <- grep("^Supplementary Table 8" , lines)
to   <- grep("^Supplementary Table 9" , lines)

headers <-  lines[seq(from, to)][grep(" +gene id" , lines[seq(from, to)])[1]]  |> 
  trimws() |> strsplit("  +") |> unlist()

matches <- regexec(
  "(\\S{9}) +(\\d+\\.\\d+|Inf) +(\\d+\\.\\d+|Inf) +(\\d+\\.\\d+|Inf) +(\\S+) +(.*)",
  lines[seq(from, to)] )

table <- as.data.frame(do.call(rbind, regmatches(lines[seq(from, to)], matches) |> sapply("[", -1)))
colnames(table) <- headers

print(tibble::as_tibble(table))
#> # A tibble: 43 × 6
#>    `gene id` A.thaliana C.hirsuta foldChange Name      Description              
#>    <chr>     <chr>      <chr>     <chr>      <chr>     <chr>                    
#>  1 AT2G23340 336.63     770.89    2.29       DEAR3     ethylene-responsive tran…
#>  2 AT4G16610 41.56      151.80    3.65       AT4G16610 C2H2-like zinc finger pr…
#>  3 AT1G26260 62.80      162.01    2.58       CIB5      transcription factor bHL…
#>  4 AT5G04840 143.62     461.98    3.22       AT5G04840 bZIP protein             
#>  5 AT5G66350 42.91      131.64    3.07       SHI       Lateral root primordium-…
#>  6 AT5G65510 40.84      1166.91   28.57      AIL7      AINTEGUMENTA-like 7 prot…
#>  7 AT5G57390 191.57     756.34    3.95       AIL5      AP2-like ethylene-respon…
#>  8 AT5G56270 235.78     515.99    2.19       ATWRKY2   putative WRKY transcript…
#>  9 AT5G51990 0.00       5.45      Inf        CBF4      dehydration-responsive e…
#> 10 AT5G46880 651.22     1337.28   2.05       HB-7      homeobox-leucine zipper …
#> # … with 33 more rows

相关问题