代码之家  ›  专栏  ›  技术社区  ›  Conor Neilson

html\u节点返回链接的两个结果

  •  0
  • Conor Neilson  · 技术社区  · 8 年前

    我正在尝试使用R获取上数据文件的所有链接 Eurostat 网站虽然我的代码目前“正常”,但我似乎在每个链接上都得到了重复的结果。

    注意,使用 download.file 就是绕过我公司的防火墙 this 答复

    library(dplyr)
    library(rvest)
    
    myurl <- "http://ec.europa.eu/eurostat/estat-navtree-portlet-prod/BulkDownloadListing?dir=data&sort=1&sort=2&start=all"
    
    download.file(myurl, destfile = "eurofull.html")
    
    content <- read_html("eurofull.html")
    
    links <- content %>% 
      html_nodes("a") %>% #Note that I dont know the significance of "a", this was trial and error
      html_attr("href") %>% 
      data.frame()
    
    # filter to only get the ".tsv.gz" links
    files <- filter(links, grepl("tsv.gz", .))
    

    查看数据框的顶部

    files$.[1:6]
    
    [1] /eurostat/estat-navtree-portlet-prod/BulkDownloadListing? 
    sort=1&file=data%2Faact_ali01.tsv.gz    
    [2] /eurostat/estat-navtree-portlet-prod/BulkDownloadListing? 
    sort=1&downfile=data%2Faact_ali01.tsv.gz
    [3] /eurostat/estat-navtree-portlet-prod/BulkDownloadListing? 
    sort=1&file=data%2Faact_ali02.tsv.gz    
    [4] /eurostat/estat-navtree-portlet-prod/BulkDownloadListing? 
    sort=1&downfile=data%2Faact_ali02.tsv.gz
    [5] /eurostat/estat-navtree-portlet-prod/BulkDownloadListing? 
    sort=1&file=data%2Faact_eaa01.tsv.gz    
    [6] /eurostat/estat-navtree-portlet-prod/BulkDownloadListing? 
    sort=1&downfile=data%2Faact_eaa01.tsv.gz
    

    1和2之间的唯一区别是1表示“…文件=数据…”而2表示“…downfile=data…”。此模式适用于数据帧下的所有对。

    如果我下载1和2并将文件读入R,则 identical 检查确认它们是相同的。

    为什么返回指向同一数据的两个链接?是否有一种方法(除了过滤“downfile”)只返回其中一个链接?

    1 回复  |  直到 8 年前
        1
  •  1
  •   hrbrmstr    8 年前

    如前所述,您可以做一些更好的节点定位。这将使用XPath vs CSS选择器,并使用 downfile href :

    html_nodes(content, xpath = ".//a[contains(@href, 'downfile')]") %>% 
      html_attr("href") %>% 
      sprintf("http://ec.europa.eu/%s", .) %>% 
      head()
    ## [1] "http://ec.europa.eu//eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&downfile=data%2Faact_ali01.tsv.gz"
    ## [2] "http://ec.europa.eu//eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&downfile=data%2Faact_ali02.tsv.gz"
    ## [3] "http://ec.europa.eu//eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&downfile=data%2Faact_eaa01.tsv.gz"
    ## [4] "http://ec.europa.eu//eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&downfile=data%2Faact_eaa02.tsv.gz"
    ## [5] "http://ec.europa.eu//eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&downfile=data%2Faact_eaa03.tsv.gz"
    ## [6] "http://ec.europa.eu//eurostat/estat-navtree-portlet-prod/BulkDownloadListing?sort=1&downfile=data%2Faact_eaa04.tsv.gz"