暇人の研究室

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

<

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

 

 

www.tkstock.site

 

 

 

前回に引き続いて今回は実際の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

 

 

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

> 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という形式で階層上に枝分かれした状態で保存されています。

 

なので階層を指定して、その部分にあるタグのみを抽出することも可能です。

 

###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"のように要素名の前に//をつけると、階層が異なるすべての要素を抽出できます。