暇人の研究室

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

<

【R言語】rvestパッケージによるウェブスクレイピング その1

 

 

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

 

rvestパッケージは何をしてくれるパッケージなのかというと、HTMLやXMLからデータを検索・抽出するための言語であるxpath(XML Path Language)をRで簡単に実行するために作られたパッケージです。

 

このパッケージによってWebサイトの情報をRに取り込むと共にその情報を整理することが簡単に行えるようになります。

 

 

【Web技術】スクレイピングする上で抑えておきたいHTMLの基本的な仕組み 

【Web技術】XMLとは何なのか? - 暇人の研究室

 

 

・インストールと読み込み

 

>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という形式で保存されています。そしてDOM内の要素をノードと言います。

 

 

html

→head

  →title(ページタイトル)

→body

  →h1(見出し)

 

 

 

www.tkstock.site

 

 

それではRを使ってノード(要素)を検索していきます。

 

rvestパッケージではhtml_nodes()という関数でノードの検索・抽出ができます。

 

またDOMの操作には、dplyrパッケージをインストールすると使えるパイプ演算子

(%<%)が便利です。

 

 

www.tkstock.site

 

 

 

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

 

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

 

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

 

 

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

 

 

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

 

リンクはノード内では<a=href~”リンクURL”>リンクタイトル</a>という形で保存されており、これを取り出すにはhtml_attrs()関数を使います。

 

> 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"
>

 

 

見出しとリンクはこのようにして抽出することができます。

 

 

次は実際にWikipedia のサイトを抽出していきます。

 

【R言語】rvestパッケージによるウェブスクレイピング その2 - 暇人の研究室

 

 

 

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

 

 

 

 

まとめ

 

Webスクレイピングするには、rvest

HTMLの読み込み⇨read_html()

特定タグの抽出⇨html_nodes("h1")

パイプ演算子 %>%

タグを抜いて文字列だけを抽出したいとき⇨html_text()

リンク抽出⇨html_attrs()