我使用XML包来获取this url的链接。
# Parse HTML URL
v1WebParse <- htmlParse(v1URL)
# Read links and and get the quotes of the companies from the href
t1Links <- data.frame(xpathSApply(v1WebParse, '//a', xmlGetAttr, 'href'))
虽然这种方法非常有效,但我使用rvest
并且在解析网络时似乎比XML
更快。我尝试了html_nodes
和html_attrs
,但我无法让它发挥作用。
答案 0 :(得分:16)
尽管我发表了评论,但您可以通过rvest
来完成此操作。请注意,我们需要首先使用htmlParse
读取页面,因为该网站的内容类型设置为text/plain
,并将rvest
投入到tizzy中。
library(rvest)
library(XML)
pg <- htmlParse("http://www.bvl.com.pe/includes/empresas_todas.dat")
pg %>% html_nodes("a") %>% html_attr("href")
## [1] "/inf_corporativa71050_JAIME1CP1A.html" "/inf_corporativa10400_INTEGRC1.html"
## [3] "/inf_corporativa66100_ACESEGC1.html" "/inf_corporativa71300_ADCOMEC1.html"
## ...
## [273] "/inf_corporativa64801_VOLCAAC1.html" "/inf_corporativa58501_YURABC11.html"
## [275] "/inf_corporativa98959_ZNC.html"
这进一步说明了rvest
的{{1}}包基础。
更新
XML
现在可以直接处理:
rvest::read_html()
答案 1 :(得分:4)
我知道你正在寻找一个rvest
答案,但这是使用XML
包的另一种方法,它可能比你正在做的更有效。
您是否在getLinks()
中看到了example(htmlParse)
功能?我使用示例中的此修改版本来获取href
链接。它是一个处理函数,因此我们可以在读取值时收集它们,从而节省内存并提高效率。
links <- function(URL)
{
getLinks <- function() {
links <- character()
list(a = function(node, ...) {
links <<- c(links, xmlGetAttr(node, "href"))
node
},
links = function() links)
}
h1 <- getLinks()
htmlTreeParse(URL, handlers = h1)
h1$links()
}
links("http://www.bvl.com.pe/includes/empresas_todas.dat")
# [1] "/inf_corporativa71050_JAIME1CP1A.html"
# [2] "/inf_corporativa10400_INTEGRC1.html"
# [3] "/inf_corporativa66100_ACESEGC1.html"
# [4] "/inf_corporativa71300_ADCOMEC1.html"
# [5] "/inf_corporativa10250_HABITAC1.html"
# [6] "/inf_corporativa77900_PARAMOC1.html"
# [7] "/inf_corporativa77935_PUCALAC1.html"
# [8] "/inf_corporativa77600_LAREDOC1.html"
# [9] "/inf_corporativa21000_AIBC1.html"
# ...
# ...
答案 2 :(得分:2)
# Option 1
library(RCurl)
getHTMLLinks('http://www.bvl.com.pe/includes/empresas_todas.dat')
# Option 2
library(rvest)
library(pipeR) # %>>% will be faster than %>%
html("http://www.bvl.com.pe/includes/empresas_todas.dat")%>>% html_nodes("a") %>>% html_attr("href")
答案 3 :(得分:0)
理查德的答案适用于HTTP页面,但不适用于我需要的HTTPS页面(维基百科)。我用RCurl的getURL函数替换如下:
library(RCurl)
links <- function(URL)
{
getLinks <- function() {
links <- character()
list(a = function(node, ...) {
links <<- c(links, xmlGetAttr(node, "href"))
node
},
links = function() links)
}
h1 <- getLinks()
xData <- getURL(URL)
htmlTreeParse(xData, handlers = h1)
h1$links()
}