2015-03-02 66 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