Вы столкнетесь с проблемой очистки очищенной страницы, если действительно настаиваете на использовании grep
и readLines
, но это, конечно, можно сделать.Например:
1004 * Загрузите страницу:
html <- readLines('http://www.guardian.co.uk/politics/2011/oct/31/nick-clegg-investment-new-jobs')
И с помощью пакета str_extract
из stringr
и простого регулярного выражения все готово:
library(stringr)
body <- str_extract(paste(html, collapse='\n'), '<div id="article-body-blocks">.*</div>')
Ну, body
выглядит ужасно, вам придется очистить его от <p>
и сценариев тоже.Это можно сделать с gsub
и друзьями (хорошие регулярные выражения).Например:
gsub('<script(.*?)script>|<span(.*?)>|<div(.*?)>|</div>|</p>|<p(.*?)>|<a(.*?)>|\n|\t', '', body)
Как и предполагал @Andrie, вам лучше использовать для этой цели несколько пакетов сборки.Небольшая демонстрация:
library(XML)
library(RCurl)
webpage <- getURL('http://www.guardian.co.uk/politics/2011/oct/31/nick-clegg-investment-new-jobs')
webpage <- readLines(tc <- textConnection(webpage)); close(tc)
pagetree <- htmlTreeParse(webpage, useInternalNodes = TRUE, encoding='UTF-8')
body <- xpathSApply(pagetree, "//div[@id='article-body-blocks']/p", xmlValue)
Где body
приводит к чистому тексту:
> str(body)
chr [1:33] "The deputy prime minister, Nick Clegg, has said the government's regional growth fund will provide a \"snowball effect that cre"| __truncated__ ...
Обновление : выше как однострочный (спасибо @Martin Morgan за предложение):
xpathSApply(htmlTreeParse('http://www.guardian.co.uk/politics/2011/oct/31/nick-clegg-investment-new-jobs', useInternalNodes = TRUE, encoding='UTF-8'), "//div[@id='article-body-blocks']/p", xmlValue)