uisng xpath, 여러 경로를 | 분리 기호. 그래서 나는 같은 목록에있는 콘테스트와 상점을 얻기 위해 그것을 사용합니다. 그럼 두 번째 목록을 얻습니다. 나중 목록을 사용하여 첫 번째 항목을 분할합니다.
url<-"http://en.wikipedia.org/wiki/List_of_department_stores_by_country"
library(XML)
xmltext <- htmlTreeParse(url, useInternalNodes = T)
## Here I use the combined xpath
cont.shops <- xpathApply(xmltext, '//*[@id="mw-content-text"]/ul/li|
//*[@id="mw-content-text"]/h3',xmlValue)
cont.shops<- do.call(rbind,cont.shops) ## from list to vector
head(cont.shops) ## first element is country followed by shops
[,1]
[1,] "[edit] Â Tunisia"
[2,] "Magasin Général"
[3,] "Mercure Market"
[4,] "Promogro"
[5,] "Geant"
[6,] "Carrefour"
## I get all the contries in one list
contries <- xpathApply(xmltext, '//*[@id="mw-content-text"]/h3',xmlValue)
contries <- do.call(rbind,contries) ## from list to vector
head(contries)
[,1]
[1,] "[edit] Â Tunisia"
[2,] "[edit] Â Morocco"
[3,] "[edit] Â Ghana"
[4,] "[edit] Â Kenya"
[5,] "[edit] Â Nigeria"
[6,] "[edit] Â South Africa"
이제 국가를 사용하여 cont.shops를 분할하는 처리를 수행합니다.
dd <- which(cont.shops %in% contries) ## get the index of contries
freq <- c(diff(dd),length(cont.shops)-tail(dd,1)+1) ## use diff to get Frequencies
contries.f <- rep(contries,freq) ## create the factor splitter
ll <- split(cont.shops,contries.f)
나는 결과를 확인할 수 있습니다
이
> ll[[contries[1]]]
[1] "[edit]  Tunisia" "Magasin Général" "Mercure Market" "Promogro" "Geant"
[6] "Carrefour" "Monoprix"
> ll[[contries[2]]]
[1] "[edit] Â Morocco"
[2] "Alpha 55, one 6-story store in Casablanca"
[3] "Galeries Lafayette, to open in 2011[1] within Morocco Mall, in Casablanca"
문서의 구조를 감안할 때, SAX 함께 구문 분석보다는 DOM 트리를 사용하는 것이 더 쉬울 수 있습니다. – juba