从HTML

时间:2016-01-21 15:59:09

标签: html r web-scraping

考虑一个包含许多下载数据链接的网页。

enter image description here

我想选择“r”数据格式的链接。目标是将它们与页面的源代码隔离开来(登录后)。

conn = url("http://www.icpsr.umich.edu/icpsrweb/ICPSR/studies/35536?
searchSource=find-analyze-home&sortBy=&q=GSS")
html_code <- readLines(conn)
close(conn)
html_code

html_code的结果包含数千条明显孤立的HTML代码行,这些行代码在R控制台中不可见,即使数据已正确下载也是如此。 即如果我将显然空的控制台复制到文本编辑器,HTML代码是可见的。因此,我很难确定我需要的信息。

如何更好地可视化下载的数据?

1 个答案:

答案 0 :(得分:3)

一种解决方案是利用rvest包:

# install.packages("rvest")
library(rvest)

page <- read_html("http://www.icpsr.umich.edu/icpsrweb/ICPSR/studies/35536?searchSource=find-analyze-home&sortBy=&q=GSS")

# grab all of the links
links <- page %>%
  html_nodes("a") %>%
  html_attr("href")

# find the links that contain 'rdata'
contains_rdata <- grep("rdata", links)
links[contains_rdata]
# [1] "http://www.icpsr.umich.edu/cgi-bin/bob/terms2?study=35536&ds=&bundle=rdata&path=ICPSR" 
# [2] "http://www.icpsr.umich.edu/cgi-bin/bob/terms2?study=35536&ds=1&bundle=rdata&path=ICPSR"
# [3] "http://www.icpsr.umich.edu/cgi-bin/bob/terms2?study=35536&ds=2&bundle=rdata&path=ICPSR"
# [4] "http://www.icpsr.umich.edu/cgi-bin/bob/terms2?study=35536&ds=3&bundle=rdata&path=ICPSR"
# [5] "http://www.icpsr.umich.edu/cgi-bin/bob/terms2?study=35536&ds=4&bundle=rdata&path=ICPSR"

正如@hrbrmstr所指出的,更强大和简化的解决方案是仅使用R数据链接定位锚标记:

page %>%
  html_nodes("a[data-package = 'r']") %>%
  html_attr("href")

如果您不是链接的粉丝,可以使用:

html_attr(html_nodes(page, "a[data-package='r']"), "href")

相关问题