Соответствие регулярного выражения в символе - PullRequest
1 голос
/ 20 августа 2010

Я новичок в R, поэтому прошу прощения, если это легко и прямо. Я успешно прочитал веб-страницу в символьном векторе. Я хочу сократить эту строку до меньшего сегмента, чтобы я мог извлечь некоторые данные. Пока все просто.

Проблема в том, что я новичок в регулярных выражениях и R, так что это было довольно сложно для меня. Я просто хочу сократить строку так, чтобы она включала все, что находится между

<div class="appForm"

and 

</div>

По некоторым причинам, мне трудно использовать пакет stringr и? Str_match.

Любая помощь - более эффективные решения - будет очень цениться. Новичок в паутине, но решил остаться в пределах R.

Ответы [ 3 ]

5 голосов
/ 20 августа 2010

Некоторые в сообществе категорически не одобряют использование регулярных выражений для анализа текста, содержащего произвольное количество вложенных выражений. R имеет XML-парсер (также применимый для HTML), который вы можете использовать для этой цели.

3 голосов
/ 20 августа 2010

Я предлагаю использовать пакет XML и XPath.Это требует некоторого изучения, но если вы серьезно относитесь к поиску в Интернете, это путь.Я сделал это с некоторыми данными о выборах на уровне округа с сайта NY Times давным-давно, и код выглядел примерно так (просто чтобы дать вам представление):

getCounty <- function(url) {
    doc = htmlTreeParse(url, useInternalNodes = TRUE)

    nodes <- getNodeSet(doc, "//tr/td[@class='county-name']/text()")
    tmp <- sapply(nodes, xmlValue)
    county <- sapply(tmp, function(x) clean(x, num=FALSE))

    return(county)
}

Вы можете узнать о XPathздесь .

Другой пример: получить все имена пакетов R с временной шкалы Crantastic.Это ищет узел div с id "временной шкалой", затем ищет ul с классом "временной шкалы", извлекает все первые a узлы из родительского узла и возвращает их текст:

url <- 'http://crantastic.org/'
doc = htmlTreeParse(url, useInternalNodes = TRUE)

nodes <- getNodeSet(doc, "//div[@id='timeline']/ul[@class='timeline']/li/a[1]/text()")
tmp <- sapply(nodes, xmlValue)
tmp

>  [1] "landis"          "vegan"           "mutossGUI"       "lordif"         
 [5] "futile.paradigm" "lme4"            "tm"              "qpcR"           
 [9] "igraph"          "aspace"          "ade4"            "MCMCglmm"       
[13] "hts"             "emdbook"         "DCGL"            "wq"             
[17] "crantastic"      "Psychometrics"   "crantastic"      "gR"             
[21] "crantastic"      "Distributions"   "rAverage"        "spikeslab"      
[25] "sem"
2 голосов
/ 20 августа 2010

Я второй совет Стивена и Винса, чтобы использовать htmlTreeParse в пакете XML. Есть довольно много SO вопросов, связанных с очисткой / использованием содержимого HTML в R, основанных на этой идее. Взгляните на

Извлечение HTML-таблиц в R-фреймы данных с использованием пакета XML

Как я могу использовать R (пакеты Rcurl / XML?!) Для очистки этой веб-страницы?

Как изолировать отдельный элемент от очищенной веб-страницы в R

Как преобразовать данные XML в data.frame?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...