2015-03-02 67 views
1

我想从下面获取href的信息。在R中使用xpathSApply

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) 

} 

你的建议是真正appreicated!

回答

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()是最近v R.

+0

我想知道为什么下面的代码不起作用。 – jasperchen 2015-03-03 16:02:39

+0

库(XML) 库(HTTR) 网址< - “http://www.mitbbs.com/bbsdoc1/USANews_101_0.html/” 的HREF < - 列表() 为(I在1:5){ 回复< - GET(paste0(url,i)) doc < - content(response,type =“text/html”) hrefs < - c(hrefs,doc [“a [./@ class ='news1']/@ href“]) } 其中i = 1表示第1页有100个hrefs,i = 2表示第2页有另外100个hrefs,...,i = 5表示第5页有另外100个hrefs。所以应该有5 x 100的hrefs。我想知道如何一次获得100个hrefs。谢谢。 – jasperchen 2015-03-03 16:16:40

+0

您的'paste0(url,i)'导致“mitbbs.com/bbsdoc1/USANews_101_0.html/1”,但此页面不存在(响应包括“

您找不到页面

” )所以我想这就是为什么你有困难。 – 2015-03-03 16:31:58

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

我收到了弃用警告和建议,因此我进行了升级和编辑。 – 2016-09-29 22:37:42