【R言語】rvestによるWebスクレイピングのやり方①

R言語でのwebスクレピング

R言語で実際にウェブ上のHTML・XML形式のデータを取得するwebスクレイピングを行う際には、「rvest」というパッケージがオススメです。

rvestパッケージは、HTMLやXMLからデータを検索・抽出するための言語であるxpath(XML Path Language)をRで簡単に実行するために作られたパッケージで、このrvestによってr言語でWebサイトの情報を取得(スクレイピング)できるようになると共にその取得した情報の整理が簡単に行えるようになります。

Rvestのインストールと読み込み

#Rvestのインストールの読み込み
>install.packages("rvest")
>library(rvest)

RvestでHTMLデータを取得する

まず例として簡単なHTMLで構成されたwebサイトhttps://ishidamotohiro.github.io/sample_check/simple.htmlを読み込みます。

f:id:oruka199665:20170421174451j:plain

アクセスすれば分かりますが、なんか仕込んでるのか疑うレベルの本当に単純なやつです。では実際にこのサイトのHTMLを収集します。rvestパッケージでは「read_html()」という関数でwebサイトのHTMLデータを取得できます。そして、収集したデータをsimpleというオブジェクトに保存します。

#https:~simple.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(見出し)

 

取得したhtmlデータから特定のノードを抽出する

それではRを使ってノード(要素)を検索していきます。rvestパッケージでは「html_nodes()」という関数でノードの検索・抽出ができます。またDOMの操作には、dplyrパッケージをインストールすると使えるパイプ演算子(%<%)が便利です。

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

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

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

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

取得したHTMLからリンクを抽出する

次にリンクを抽出します。リンクはノード内では<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
>

見出しとリンクはこのようにして抽出することができます。今度はは実際に「Rvest」を使ってWikipedia のサイトの情報を取得し必要な情報だけ抽出していきます。

スポンサーリンク

まとめ

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

・HTMLの読み込み⇨read_html()

・特定タグの抽出⇨html_nodes(“h1”)

・パイプ演算子 %>%

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

・リンク抽出⇨html_attrs()

以上がwebスクレイピングとhtml解析の基本ですが、実務でいちいち1ページずつスクレイピングしていてはキリがないので、基本的には一括でスクレイピングします。大量のwebページをfor文を使って一気にスクレイピングする方法は以下の記事に書きましたので興味のある方はぜひ読んでみてください。

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で



「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」

「エンジニアとして若いうちから高収入を得たい」



という強い気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする

   侍エンジニア塾       
侍エンジニアの無料体験レッスンを予約する -->