Извлечение ссылок с веб-страницы с помощью R

Два поста ниже являются отличными примерами различных подходов извлечения данных с веб-сайтов и их разбора на R.

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

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

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

Все, что я хочу сделать, это извлечь ссылки, которые соответствуют заданному шаблону. Мне кажется, что я мог бы использовать RCurl для чтения на веб-страницах и извлечь их методом грубой силы, используя строковые выражения. Тем не менее, если веб-страница довольно хорошо сформирована, как бы я поступил так с помощью пакета XML.

По мере того как я узнаю больше, мне нравится «смотреть» на данные, когда я работаю над проблемой. Проблема заключается в том, что некоторые из этих подходов генерируют списки списков списков и т. Д., Поэтому новичку (например, мне) трудно пройти туда, куда мне нужно идти.

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

Ответы на вопрос(2)

Еще проще сrvest:

library(xml2)
library(rvest)

URL <- "http://stackoverflow.com/questions/3746256/extract-links-from-webpage-using-r"

pg <- read_html(URL)

head(html_attr(html_nodes(pg, "a"), "href"))

## [1] "//stackoverflow.com"                                                                                                                                          
## [2] "http://chat.stackoverflow.com"                                                                                                                                
## [3] "//stackoverflow.com"                                                                                                                                          
## [4] "http://meta.stackoverflow.com"                                                                                                                                
## [5] "//careers.stackoverflow.com?utm_source=stackoverflow.com&utm_medium=site-ui&utm_campaign=multicollider"                                                       
## [6] "https://stackoverflow.com/users/signup?ssrc=site_switcher&returnurl=http%3a%2f%2fstackoverflow.com%2fquestions%2f3746256%2fextract-links-from-webpage-using-r"
Решение Вопроса

Документация дляhtmlTreeParse показывает один метод. Вот еще один:

> url <- "http://stackoverflow.com/questions/3746256/extract-links-from-webpage-using-r"
> doc <- htmlParse(url)
> links <- xpathSApply(doc, "//a/@href")
> free(doc)

(Вы можете удалить атрибут «href» из возвращенных ссылок, передав «links» через «as.vector».)

Мой предыдущий ответ:

Один из подходов заключается в использовании Хэдли Уикхемаstringr пакет, который вы можете установить с помощью install.packages ("stringr", dep = TRUE).

> url <- "http://stackoverflow.com/questions/3746256/extract-links-from-webpage-using-r"
> html <- paste(readLines(url), collapse="\n")
> library(stringr)
> matched <- str_match_all(html, "<a href=\"(.*?)\"")

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

matched это список матриц, по одной на входную строку в векторе html - так как он имеет длину один здесь, у соответствий есть только один элемент. Совпадения для первой группы захвата находятся в столбце 2 этой матрицы (и в общем случае i-я группа должна отображаться в столбце (i + 1)).

> links <- matched[[1]][, 2]
> head(links)
[1] "/users/login?returnurl=%2fquestions%2f3746256%2fextract-links-from-webpage-using-r"
[2] "http://careers.stackoverflow.com"                                                  
[3] "http://meta.stackoverflow.com"                                                     
[4] "/about"                                                                            
[5] "/faq"                                                                              
[6] "/"
 Gerome Bochmann02 мар. 2014 г., 13:37
Мне действительно нравится использование free (doc), я даже не знал, что такая функция существует, и теперь я всегда буду использовать ее.
 Btibert319 сент. 2010 г., 21:07
Благодарю. Когда я думал об использовании регулярных выражений, я определенно собирался использовать пакет Хадли. Я сделаю верх, но я определенно думаю, что это то, что мне было нужно.

Ваш ответ на вопрос