4

我正在尝试使用 RCurl 包将一些空气污染背景数据作为 data.frame 直接加载到 R 中。

有问题的网站在下载 .csv 文件之前有 3 个下拉框可供选择选项,如下图所示:

在此处输入图像描述

我正在尝试从下拉框中选择 3 个值,然后使用“下载 CSV”按钮将数据作为 data.frame 直接下载到 R 中。

我想下载特定站点的多年和多种污染物的不同组合。

在 StackOverflow 上的其他帖子中,我遇到getForm了 RCurl 包中的功能,但我不明白如何使用此功能控制 3 个下拉框。

数据源的 URL 是:http ://uk-air.defra.gov.uk/data/laqm-background-maps?year=2011

4

2 回答 2

5

对于这个网站,您可以构建一个 url 并提交一个GET请求以简单地获取 csv:

library(httr)
baseURL <- "http://uk-air.defra.gov.uk/data/laqm-background-maps.php"
queryList <- parse_url(baseURL)
queryList$query <- list("bkgrd-la" = 359, "bkgrd-pollutant" = "no2", "bkgrd-year" = 2011,
                        action = "data", year = 2011, submit = "Download+CSV")
res <- GET(build_url(queryList), write_disk("temp.csv"))

您可以通过解析原始页面来获取表单的代码:

library(XML)
doc <- htmlParse("http://uk-air.defra.gov.uk/data/laqm-background-maps?year=2011")
councils <- doc["//*[@id='bkgrd-la']/option", fun = function(x){
  data.frame(value = xmlGetAttr(x, "value"), council = xmlValue(x))
  }]
councils <- do.call(rbind.data.frame, councils)
> head(councils)
value                      council
1   359        Aberdeen City Council
2   360        Aberdeenshire Council
3     1        Adur District Council
4     2    Allerdale Borough Council
5     4 Amber Valley Borough Council
6   401      Anglesey County Council

pollutants <- doc["//*[@id='bkgrd-pollutant']/option", fun = function(x){
  data.frame(value = xmlGetAttr(x, "value"), council = xmlValue(x))
}]
pollutants <- do.call(rbind.data.frame, pollutants)
> head(pollutants)
value council
1   no2     NO2
2   nox     NOx
3  pm10    PM10
4  pm25   PM2.5
5   no2     NO2
6   nox     NOx

ETC...

于 2014-12-09T15:31:48.957 回答
2

您可以在一行中完成:

read.csv("http://uk-air.defra.gov.uk/data/laqm-background-maps.php?bkgrd-la=359&bkgrd-pollutant=no2&bkgrd-year=2011&action=data&year=2011&submit=Download+CSV", 
         skip=5)
于 2014-12-09T15:54:57.473 回答