在R中使用xpathSApply

时间:2015-03-02 16:16:04

标签: r

我想从下面获取href的信息。

http://www.mitbbs.com/bbsdoc1/USANews_101_0.html

我更喜欢从这个

这样的话题中得到一些东西

/USANews/31587637.html

/USANews/31587633.html

/USANews/31587631.html

...

代码在下面使用,但它不起作用。

library("XML")   
library("httr")
library("stringr")

data <- list()

for( i in 101:201){
url <- paste('bbsdoc1/USANews_', i, '_0.html', sep='')
html <- content(GET("http://www.mitbbs.com/", path = url),as = 'parsed')
url.list <- xpathSApply(html, "//td[@align='left' height=26]/[@class='news1' href]", xmlAttrs)
data <- rbind(data, url.list)

} 

您的建议真的很有用!

2 个答案:

答案 0 :(得分:2)

你应该研究一下rvest包,它简化了很多事情

library(rvest); library(dplyr)
myList <- read_html("http://www.mitbbs.com/bbsdoc1/USANews_101_0.html") %>% 
                html_nodes(".news1") %>% xml_attr("href")
mtList

myList %>% gsub("/article_t", "", .)

答案 1 :(得分:1)

检索文件

library(XML)
html = htmlParse("http://www.mitbbs.com/bbsdoc1/USANews_101_0.html")

并使用适当的xpath查询提取您感兴趣的链接和文本

href = "//a[./@class='news1']/@href"
text = "//a[./@class='news1']/text()"
df = data.frame(
    url=sub("article_t/", "", sapply(html[href], as.character)),
    text=trimws(sapply(html[text], xmlValue)))

trimws()是R的最新版本中的函数。