Подтвердить что ты не робот

Есть ли простой способ в R извлечь только текстовые элементы HTML-страницы?

Есть ли простой способ в R извлечь только текстовые элементы HTML-страницы?

Я думаю, что это называется "скрипинг экрана", но у меня нет опыта в этом, мне просто нужен простой способ извлечения текста, который вы обычно видите в браузере при посещении URL-адреса.

4b9b3361

Ответ 1

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

Один из способов сделать это - использовать выражения 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 работает со всеми веб-страницами, иногда это может не фильтровать script или он может просто не работать с некоторыми другими страницами, лучше всего экспериментировать!)

P.S. Другой способ, который работает почти отлично, я думаю, что при веб-очищении весь текст из 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-адресов, если интернет-браузер падает на плохую страницу, тогда R может повесить или рухнуть сам (я Думаю, что в этом случае это очень помогает?). Также он склонен к разрешению всплывающих окон. Я не знаю, прошло какое-то время с тех пор, как я это сделал, но подумал, что я должен указать на это.

Ответ 2

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

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

Ответ 3

Мне повезло с функцией 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-таблицах часто содержится нежелательная информация, которую вы не хотите, помимо данных, которые вы хотите.