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

前回に引き続いて今回は実際のWebサイトをスクレイピングしていきます。というわけで新世紀エヴァンゲリオンのWikipediaのデータ(新世紀エヴァンゲリオン – Wikipedia)をスクレイピングしてタグや文字の検索・抽出を行っていきます。

###サイトのデータを取り込む###

> eva<-read_html(“https://ja.wikipedia.org/wiki/新世紀エヴァンゲリオン”) 

###取り込んだデータの確認###

> eva
{xml_document}
<html class=”client-nojs” lang=”ja” dir=”ltr”>
[1] <head>\n<meta http-equiv=”Content-Type” content=”text/html; charset=UT …
[2] <body class=”mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subje …
>

取り込んだサイトデータの全容を把握したいのならば、サイトのページで右クリック⇨ページのソースでそのサイトのHTML構成を見ることが可能です。ちなみにこのページならこんな感じです。

f:id:oruka199665:20170710044256j:plain

見出しの抽出

ここからまず見出しの<h1>タグを抽出していきます。

###見出しの抽出###

> eva %>% html_nodes("h1")
{xml_nodeset (1)}
[1] <h1 id="firstHeading" class="firstHeading" lang="ja">新世紀エヴァンゲリオン</h1>

###見出しの文字だけを抽出###

> eva %>% html_nodes("h1")%>%html_text
[1] "新世紀エヴァンゲリオン"

リンクの抽出

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

###リンクの抽出###

> eva %>% html_nodes("a") %>% html_attr("href")
[1] NA 
[2] "#mw-head" 
[3] "#p-search" 
[4] "/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Question_book-4.svg" 
[5] "/wiki/Wikipedia:%E6%A4%9C%E8%A8%BC%E5%8F%AF%E8%83%BD%E6%80%A7" 
[6] "/wiki/Wikipedia:%E4%BF%A1%E9%A0%BC%E3%81%A7%E3%81%8D%E3%82%8B%E6%83%85%E5%A0%B1%E6%BA%90"

スポンサーリンク

パイプ演算子で特定の部分だけ抽出する

抽出したノードはDOMという形式で階層上に枝分かれした状態で保存されています。なので階層を指定して、その部分にあるタグのみを抽出することも可能です。階層の指定はdplyrをインポートすると使えるパイプ演算子を使うと便利です。

###head部分のみを抽出する###

> eva %>% html_nodes(xpath="/html/head")
{xml_nodeset (1)}
[1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF- ...

###テーブル(表)の抽出

eva %>% html_nodes(xpath="//table")
{xml_nodeset (44)}
 [1] <table class="plainlinks ambox ambox-content" role="presentation"><tr>\ ...
 [2] <table class="infobox bordered">\n<tr>\n<th colspan="2" style="backgrou ...
 [3] <table class="collapsible collapsed" style="background:transparent; wid ...
 [4] <table class="vertical-navbox nowraplinks" style="float:right;clear:rig ...
 [5] <table class="wikitable" width="250px" align="right" cellpadding="0" ce ...
 [6] <table class="wikitable" border="1">\n<tr>\n<th>機体</th>\n<th>補足</th>\n< ...

###<p>タグの要素を抽出###

eva %>% html_nodes(xpath="//p")
{xml_nodeset (94)}
 [1] <p>『<b>新世紀エヴァンゲリオン</b>』(しんせいきエヴァンゲリオン、<i>Neon Genesis EVANGELION</i>)は、 ...
 [2] <p><a href="/wiki/%E5%BA%B5%E9%87%8E%E7%A7%80%E6%98%8E" title="庵野秀明">庵野 ...
 [3] <p><a href="/wiki/1995%E5%B9%B4" title="1995年">1995年</a>10月4日から<a href= ...
 [4] <p>漫画とアニメの<a href="/wiki/%E3%83%A1%E3%83%87%E3%82%A3%E3%82%A2%E3%83%9F% ...
 [5] <p><a href="/wiki/2006%E5%B9%B4" title="2006年">2006年</a>には、本作を新たな設定・ストー ...
 [6] <p>本作品の著作権者表記はテレビ版に関しては「GAINAX/Project Eva.・テレビ東京」、劇場版に関しては「GAINAX/EVA制 ...
 [7] <p>物語の舞台は<a href="/wiki/%E8%A5%BF%E6%9A%A6" title="西暦">西暦</a><a href="/ ...
 [8] <p>当初はゲンドウの命令で、そして<b>EVA零号機</b>のパイロットである少女<b><a href="/wiki/%E7%B6%BE%E ...
 [9] <p>しかし、<a href="/wiki/%E3%82%A2%E3%83%A1%E3%83%AA%E3%82%AB%E5%90%88%E8% ...
[10] <p>自らが乗ったEVAの手で友人が足を切断する大怪我を負ったことで、シンジはEVAのパイロットを辞めるが、そこに強大な力をもつ第14使徒が現 ...
[11] <p>しかし第15使徒との戦いにおいてアスカが精神攻撃を受け廃人となり…

“//table”のように要素名の前に//をつけると、階層が異なるすべての要素を抽出できます。

終わり

またR言語を使用したwebスクレイピングについて、本格的に勉強するならば「Rによるスクレイピング入門という参考書がオススメです。入門と書いてますが実務で使えるレベルのことが分かりやすく書いてあります。

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


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



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

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

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

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



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



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





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



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


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


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


シェアする

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

フォローする