下面的两个帖子是从网站提取数据并将其解析为R的不同方法的很好的例子.
我对编程非常陌生,刚开始使用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)