Существует ли простой путь в R для извлечения только текстовых элементов страницы HTML?

Да, когда вы импортируете классы с одинаковыми простыми именами, вы должны ссылаться на них по их полностью квалифицированным именам классов. Я бы оставил инструкции импорта, поскольку он дает другим разработчикам представление о том, что находится в файле, когда они работают с ним.

java.util.Data date1 = new java.util.Date();
my.own.Date date2 = new my.own.Date();
22
задан JoshuaCrove 7 July 2010 в 14:04
поделиться

3 ответа

Я должен был сделать это однажды сам.

Один из способов сделать это - использовать выражения XPath. Вам понадобятся эти пакеты, установленные из репозитория на http://www.omegahat.org/

library(RCurl)
library(RTidyHTML)
library(XML)

. Мы используем RCurl для подключения к интересующему веб-сайту. Он имеет множество опций, которые позволяют вам получить доступ к веб-сайтам, с которыми у стандартных функций в базе R возникнут трудности, я думаю, это будет справедливо сказать. Это R-интерфейс к библиотеке libcurl.

Мы используем RTidyHTML для очистки искаженных веб-страниц HTML, чтобы их было легче анализировать. Это R-интерфейс библиотеки libtidy.

Мы используем XML для анализа кода HTML с помощью наших выражений XPath. Это R-интерфейс к библиотеке libxml2.

В любом случае, вот что вы делаете (минимальный код, но опции доступны, см. Справочные страницы соответствующих функций):

u <- "http://stackoverflow.com/questions/tagged?tagnames=r" 
doc.raw <- getURL(u)
doc <- tidyHTML(doc.raw)
html <- htmlTreeParse(doc, useInternal = TRUE)
txt <- xpathApply(html, "//body//text()[not(ancestor::script)][not(ancestor::style)][not(ancestor::noscript)]", xmlValue)
cat(unlist(txt))

Могут быть некоторые проблемы с этим подходом, но я не могу вспомнить то, что они не в моей голове (я не думаю, что мое выражение xpath работает со всеми веб-страницами, иногда оно может не отфильтровывать код скрипта или просто может вообще не работать с некоторыми другими страницами, лучше всего экспериментировать! )

PS Другой способ, который работает почти идеально, я думаю, что при просмотре в Интернете всего текста из html заключается в следующем (в основном, когда Internet Explorer выполняет преобразование за вас):

library(RDCOMClient) 
u <- "http://stackoverflow.com/questions/tagged?tagnames=r"
ie <- COMCreate("InternetExplorer.Application") 
ie$Navigate(u)
txt <- list()
txt[[u]] <- ie[["document"]][["body"]][["innerText"]] 
ie$Quit() 
print(txt) 

ОДНАКО, мне никогда не нравилось делать это потому что это не только медленно, но если вы векторизуете его и применяете вектор URL, если Internet Explorer падает на плохой странице, тогда R может зависнуть или аварийно завершить работу (я не думаю, что попытка очень помогает в этом случае) , Также он допускает всплывающие окна. Я не знаю, прошло уже много времени с тех пор, как я это сделал, но подумал, что должен указать на это.

23
ответ дан 5 revs, 2 users 95% 29 November 2019 в 05:09
поделиться

Что ж, это не совсем способ R, но все очень просто: перехитрите плагин для firefox. Базовая версия бесплатна и помогает извлекать таблицы и прочее.

а, и если вы действительно хотите проделать сложный путь в R, эта ссылка для вас:

3
ответ дан 29 November 2019 в 05:09
поделиться

Мне повезло с функцией readHTMLTable() пакета XML. Она возвращает список всех таблиц на странице.

> library(XML)
> url <- 'http://en.wikipedia.org/wiki/World_population'
> allTables <- readHTMLTable(url)

На каждой странице может быть много таблиц.

> length(allTables)
[1] 17

Поэтому просто выберите ту, которая вам нужна.

> tbl <- allTables[[3]]

Самой большой проблемой может стать установка пакета XML. Он большой, и ему нужна библиотека libxml2 (а в Linux ему также нужен пакет xml2-config Debian). Вторая большая проблема заключается в том, что HTML-таблицы часто содержат ненужный вам мусор, помимо данных, которые вам нужны.

3
ответ дан 29 November 2019 в 05:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: