読者です 読者をやめる 読者になる 読者になる

暇人の研究室

金融工学やR言語・統計学について書いてます。

<

【R言語】Rによるウェブスクレイピング その1

 

 

Rで実際にウェブ上のHTMLデータをスクレイピングするには、rvestパッケージがオススメです。

 

 

インストールと読み込み

>install.packages("rvest")
>library(rvest)

 

まず例として簡単なHTML(https://ishidamotohiro.github.io/sample_check/simple.html)を読み込みます。

 

f:id:oruka199665:20170421174451j:plain

 

アクセスすれば分かりますが、なんか仕込んでるのか疑うレベルの本当に単純なやつです。

 

 

では実際にこのサイトのHTMLを収集します。rvestパッケージではread_html()という関数でやってくれます。そして、収集したデータをsimpleというオブジェクトに保存します。

 

> simple <- read_html("https://IshidaMotohiro.github.io/sample_check/simple.html")

 

これでできたはずなので、オブジェクトにアクセスして確認してみます。


> simple
{xml_document}
<html>
[1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF ...
[2] <body>\n <h1>大見出し</h1>\n <a href="http://www.okadajp.org/RWiki/"> ...
>

 

Rのデータってサンプルデータみたいな行列で区切られたデータが一般的なので、ちょっと意味が分からないというのが初めて見た感想だと思います。

 

 

これはHTMLをツリー状で表現するDOMという形式で保存されています。

 

html

→head

  →title(ページタイトル)

→body

  →h1(見出し)

 

 

www.tkstock.site

 

 

それでは要素を検索していきます。rvestパッケージではhtml_nodes()という関数で検索・抽出ができます。

 

 

まず見出し要素(h1)を抽出してみます。

 

> simple %>% html_nodes("h1")
{xml_nodeset (1)}
[1] <h1>大見出し</h1>

 

タグを抜いて文字列だけを抽出したい場合は、html_text()関数を使います。

 

> simple %>% html_nodes("h1") %>% html_text()
[1] "大見出し"

 

 

次にリンクを抽出します。

 

> simple %>% html_nodes("a") %>% html_attrs()
1
href
"http://www.okadajp.org/RWiki/"

2
href target
"http://rmecab.jp" "_blank"

>
> simple %>% html_nodes("a") %>% html_attr("href")
[1] "http://www.okadajp.org/RWiki/" "http://rmecab.jp"
>

 

見出しとリンクはこのようにして抽出することができます。ちなみにhtml_nodes()の因数はx、css、pathの3つがあり、xはDOMに置換されたhtmlの抽出で、残り2つはcssとxpathを抽出します。

 

 

www.tkstock.site

 

 

次は表の抽出やAPI、JSON形式のデータ抽出を見ていきます。

 

 

追記:スクレイピングについて本格的に勉強するならばこちらの本がオススメです。入門と書いてますが実務で使えるレベルのことが分かりやすく書いてあります。