【问题标题】:Using R to get download URL by link name使用 R 通过链接名称获取下载 URL
【发布时间】:2017-10-10 18:15:07
【问题描述】:

我正在尝试使用rvestthis site. 下载文件列表文件名是常规的,但下载 URL 不匹配模式(只有几十位数字),所以我不能根据任何标准构建下载 URL 列表。如何使用链接名称下载实际文件?

到目前为止,我可以获得感兴趣的文件列表(基于 CSS 选择器),并且可以获得网站上所有链接的列表,但我不确定如何匹配它们。我需要能够检查站点的更改并下载任何名称已更改的文件,因此使用文件名访问文件很重要。我对 HTML/CSS 不是很熟悉,所以这可能是我无法弄清楚这个可能很简单的任务的原因。

library(rvest)

# url with list of download files

url <- "http://www-air.larc.nasa.gov/cgi-bin/ArcView/actamerica.2016?C130=1"
doc <- read_html(url)

# getting everything within the CSS selector "td a"

all <- html_text(html_nodes(doc, "td a"))

# getting list of certain file names

filetype <- "PICARRO"
files <- all[grep(filetype, all)]

# this returns a list of all links on the page, 
# but I'm not sure how to match the links up with their names

html_attr(html_nodes(doc, "a"), "href")

提前感谢您的帮助。

【问题讨论】:

    标签: html css r web-scraping


    【解决方案1】:

    方法略有不同。

    获取所有可下载的文件名和 URL:

    library(httr)
    library(rvest)
    library(tidyverse)
    
    pg <- read_html("http://www-air.larc.nasa.gov/cgi-bin/ArcView/actamerica.2016?C130=1")
    
    fils <- html_nodes(pg, xpath=".//a[contains(@href, 'cgi-bin/enzFile')]")
    
    data_frame(
      filename = html_text(fils),
      link = sprintf("http://www-air.larc.nasa.gov%s", html_attr(fils, "href"))
    ) -> xdf
    
    glimpse(xdf)
    ## Observations: 719
    ## Variables: 2
    ## $ filename <chr> "ACTAMERICA-Elevation_C130_20160711_R0.ict", "ACTAMERICA-Elevation_C130_20160715_R0.ict", "ACTAMERI...
    ## $ link     <chr> "http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f...
    
    xdf
    ## # A tibble: 719 x 2
    ## filename                                                                                                                                                                                                                                                                           link
    ## <chr>                                                                                                                                                                                                                                                                          <chr>
    ## 1 ACTAMERICA-Elevation_C130_20160711_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303731315f52302e696374
    ## 2 ACTAMERICA-Elevation_C130_20160715_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303731355f52302e696374
    ## 3 ACTAMERICA-Elevation_C130_20160718_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303731385f52302e696374
    ## 4 ACTAMERICA-Elevation_C130_20160719_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303731395f52302e696374
    ## 5 ACTAMERICA-Elevation_C130_20160721_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303732315f52302e696374
    ## 6 ACTAMERICA-Elevation_C130_20160722_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303732325f52302e696374
    ## 7 ACTAMERICA-Elevation_C130_20160725_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303732355f52302e696374
    ## 8 ACTAMERICA-Elevation_C130_20160726_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303732365f52302e696374
    ## 9 ACTAMERICA-Elevation_C130_20160727_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303732375f52302e696374
    ## 10 ACTAMERICA-Elevation_C130_20160801_R0.ict http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d456c65766174696f6e5f433133305f32303136303830315f52302e696374
    ## # ... with 709 more rows
    

    得到你关心的人:

    picarro <- filter(xdf, grepl("PICARRO", filename))
    

    下载它们:

    walk2(picarro$link, picarro$filename, download.file)
    ## trying URL 'http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d5049434152524f5f433133305f32303136303532375f52422e696374'
    ## Content type 'text/plain' length 1023662 bytes (999 KB)
    ## ==================================================
    ##   downloaded 999 KB
    ## 
    ## trying URL 'http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d5049434152524f5f433133305f32303136303731315f52302e696374'
    ## Content type 'text/plain' length 886392 bytes (865 KB)
    ## ==================================================
    ##   downloaded 865 KB
    ## 
    ## trying URL 'http://www-air.larc.nasa.gov/cgi-bin/enzFile?f49DA0512C4E81E3C01FDB44A33CD88AAFE2f7075622d6169722f414354414d45524943412f323031362f433133305f41495243524146542f444947414e47492e4a4f534855412f414354414d45524943412d5049434152524f5f433133305f32303136303731355f52302e696374'
    ## Content type 'text/plain' length 530339 bytes (517 KB)
    ## ==================================================
    ##   downloaded 517 KB
    

    等等

    【讨论】:

      【解决方案2】:

      如何使用purrr中的map2组合allhtml_attr(html_nodes(doc, "a"), "href")两个向量,然后根据文件类型名称进行过滤

       url <- "http://www-air.larc.nasa.gov/cgi-bin/ArcView/actamerica.2016?C130=1"
      doc <- read_html(url)
      all <- html_text(html_nodes(doc, "td a"))
      href <- html_attr(html_nodes(doc, "a"), "href")
      
      z <- purrr::map2(all, href, function(x, y) data.frame(x, y)) 
      z <- do.call(rbind, z)
      filetype <- "PICARRO"
      z[grep(filetype, z[,1]),]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-09-10
        • 1970-01-01
        • 2021-09-27
        • 2015-07-28
        • 1970-01-01
        • 2018-01-10
        相关资源
        最近更新 更多