2016-02-29 88 views
0

我目前正在嘗試解析R中的HTML代碼。目前我正在使用XML和RCurl包來解析信息。解析R中的HTML代碼

webpage <- getURL("http://www.imdb.com/title/tt0809504/fullcredits?ref_=tt_ov_wr#writers") 
webpage <- readLines(tc <- textConnection(webpage)); close(tc) 
pagetree <- htmlTreeParse(webpage, error=function(...){}, useInternalNodes = TRUE) 
x <- xpathSApply(pagetree, "//*/table", xmlValue) 
# do some clean up with regular expressions 
x <- unlist(strsplit(x, "\n")) 
x <- gsub("\t","",x) 
x <- sub("^[[:space:]]*(.*?)[[:space:]]*$", "\\1", x, perl=TRUE) 
x <- x[!(x %in% c("", "|"))] 
head(x) 

不過,我真正想要做的是隻分析HTML的特定部分開始

<h4 class="dataHeaderWithBorder">Writing Credits

<h4 name="cast" id="cast" class="dataHeaderWithBorder">

結束任何幫助將是非常感謝。

+2

你或許應該閱讀[這](http://www.imdb.com/conditions):_「機器人和屏幕抓取:你可以不使用數據挖掘,機器人,屏幕抓取或本網站上的類似數據收集和提取工具,除非我們明確書面同意,如下所述._'omdbapi' R軟件包可能有你需要vs違反ToS。 – hrbrmstr

+0

哦,是的,哎呀,對不起我可以使用IMDB提供的.list文件 – Lowpar

+1

如果你遇到類似的問題,那麼其他網站允許這樣做,rvest可能是一個更好的包,你正在努力去做。看到哈德利的[教程](https://github.com/hadley/rvest) – Scott

回答

1

該問題沒有明確指定需要輸出什麼,但這裏是一個自包含的示例,返回指定的節點。

library(XML) 

Lines <- '<a> 
    <b class = "Z">abc - ABC</b> 
    <b class = "Z">xyz - XYZ</b> 
    <b>def - DEF</b> 
</a>' 

doc <- htmlTreeParse(Lines, asText = TRUE) 
xpath <- "//b[@class = 'Z' and contains(., 'xyz')]" 
getNodeSet(xmlRoot(doc), xpath) 

捐贈:

[[1]] 
<b class="Z">xyz - XYZ</b>