以下の2つの投稿は、Webサイトからデータを抽出してRに解析するさまざまなアプローチの優れた例です。
XMLパッケージを使用してHTMLテーブルをRデータフレームにスクレイピング
R(Rcurl/XMLパッケージ)を使用して、このWebページをスクレイピングするにはどうすればよいですか
私はプログラミングに非常に慣れていないので、Rから始めたばかりなので、この質問がかなり基本的なものであることを願っていますが、上記の投稿を考えると、そうだと思います。
私が探しているのは、特定のパターンに一致するリンクを抽出することだけです。 RCurlを使用してWebページを読み取り、文字列式を使用してブルートフォースメソッドを抽出できると思います。とは言っても、Webページが適切に形成されている場合、XMLパッケージを使用してどのように作成すればよいでしょうか。
詳細を知るにつれ、問題に取り組むときにデータを「見る」のが好きです。問題は、これらのアプローチの一部がリストのリストのリストなどを生成することです。そのため、新しい人(私のような人)が私が行く必要がある場所を歩くのは難しいです。
繰り返しますが、私はプログラミングのすべてに非常に新しいので、ヘルプやコードスニペットは大歓迎です。
htmlTreeParse
のドキュメントには、1つの方法が示されています。ここに別のものがあります:
> url <- "http://stackoverflow.com/questions/3746256/extract-links-from-webpage-using-r"
> doc <- htmlParse(url)
> links <- xpathSApply(doc, "//a/@href")
> free(doc)
(「リンク」を「as.vector」に渡すことにより、返されたリンクから「href」属性を削除できます。
私の以前の返事:
1つの方法は、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=\"(.*?)\"")
(私は、正規表現の使用をここで承認しない人もいると思います。)
matched
はマトリックスのリストで、ベクターhtmlの入力文字列ごとに1つです。ここでは長さが1であるため、matchedには1つの要素しかありません。最初のキャプチャグループの一致は、このマトリックスの列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] "/"
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"