使用R从网页中提取链接

Bti*_*rt3 26 r web-scraping

下面的两个帖子是从网站提取数据并将其解析为R的不同方法的很好的例子.

使用XML包将html表刮入R数据帧

我如何使用R(Rcurl/XML包?!)来抓取这个网页

我对编程非常陌生,刚开始使用R,所以我希望这个问题非常基本,但考虑到上面的那些帖子,我想是的.

我要做的就是提取与给定模式匹配的链接.我觉得我可以使用RCurl来读取网页并使用字符串表达式提取它们的暴力方法.也就是说,如果网页形成得相当好,我将如何使用XML包进行此操作.

随着我了解更多,我喜欢在查看问题时"查看"数据.问题是这些方法中的一些生成了列表列表等列表,因此新的(像我)这样的人很难走到我需要去的地方.

同样,我对所有编程都是新手,所以任何帮助或代码片段都将不胜感激.

hrb*_*str 33

更简单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"
Run Code Online (Sandbox Code Playgroud)


Dav*_*d F 32

文档htmlTreeParse显示了一种方法.这是另一个:

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

(您可以通过将"链接"传递给"as.vector"来从返回的链接中删除"href"属性.)

我以前的回复:

一种方法是使用Hadley Wickham的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=\"(.*?)\"")
Run Code Online (Sandbox Code Playgroud)

(我猜有些人可能不赞成在这里使用正则表达式.)

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] "/"
Run Code Online (Sandbox Code Playgroud)