首页 > 解决方案 > 模仿从 R 中单击下载按钮

问题描述

如何从 R 会话中模仿单击以下网站中的下载按钮并下载 TSV 表?

https://comptox.epa.gov/dashboard/chemical_lists

我知道曾经有Rselenium 和 PhantomJS,它们都不再是最新的了,而且显然有V8。但是,我不能真正使用后者。

标签: javascripthtmlrweb-scrapingv8

解决方案


该站点从GraphQL API调用中获取数据:

POST https://comptox.epa.gov/dashboard/graphql

当您单击下载按钮时,它会将相同的数据发送到另一个 api 以格式化数据并下载 tsv。

您可以首先从 API 获取数据并将其格式化为 tsv 文件:

library(httr)

query <- "{
    lists { 
        label 
        abbreviation 
        short_description 
        chemical_count 
        updated_at
    }
}"

r <- POST("https://comptox.epa.gov/dashboard/graphql", 
    content_type("application/json"),
    body = list(
        query = query
    ), encode = "json")

data <- content(r, "parsed")

#add link column
for(i in seq_along(data$data$lists)){
  data$data$lists[[i]]$acronym <- paste("https://comptox.epa.gov/dashboard/chemical_lists", data$data$lists[[i]]$abbreviation, sep="/")
}

#convert to dataframe
df <- do.call(rbind.data.frame, data$data$lists)

write.table(df, file = "chemical.tsv", row.names=FALSE, sep="\t", quote = FALSE)

文件输出:

在此处输入图像描述


推荐阅读