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

暇人の研究室

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

<

【R言語】XMLパッケージでWebスクレイピングしてみる

 

 

今日はRを使ってウィキペディアからhtmlデータをスクレイピングしたいと思います。ちなみに、Rでのウェブスクレイピングはこちらの本をとても参考になりました。手元に置いておいて損はない一冊です。

 

 

 

 まずスクレイピングに必要なXMLパッケージを読み込みます。(インストールしていない方はinstall.packages(”パッケージ名”)でインストールしてください)

 

>install.packages(”XML”)

>library(XML)

 

 

 今回はエヴァのウィキペディア(新世紀エヴァンゲリオン - Wikipedia)をスクレイピングしていきます。

 

## ウェブページのデータを取得する ##

eva<-htmlParse(readLines("https://ja.wikipedia.org/wiki/新世紀エヴァンゲリオン")) 

 

 

次に必要な要素の抽出を行っていきます。要素はhtml,css,xpathごとに指定していきます。まずwikiにある文字を抽出してみます。

 

基本的にDOM(Rに読み込んだHTML)からノード(要素)を抽出するには、xpathSApply()という関数を使います。文章を抽出するには、第2引数を”//p”とし第3引数をxmlValueと指定します。タグを除去します。

 

###パースしたオブジェクトからXPathで文章を抽出する
> word <- xpathSApply(trg, "//p", xmlValue)
>
> head(word)
[1] "『新世紀エヴァンゲリオン』(しんせいきエヴァンゲリオン、Neon Genesis EVANGELION)は、日本のテレビアニメ作品。略称は「エヴァンゲリオン」「エヴァ」「EVA」。"
[2] "庵野秀明監督、GAINAXの原作によるSFアニメ作品。大災害「セカンドインパクト」後の世界(2015年)を舞台に…

 

 

これで文字列解析とかができます。ノードの抽出はgetNodeSet()でもできます。次は表を抽出します。グラフは<table>タグで構成されているので、引数を”//table”として指定すれば抽出できます。

 

> table<- xpathSApply(eva, "//table")

または

>table<-getNodeSet(eva,"//table")


> length(tmp)
[1] 44


> table1
<table class="plainlinks ambox ambox-content" role="presentation">
<tr><td class="mbox-image">
<div style="width:52px"><a href="/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB:Question_book-4.svg" class="image"><img alt="Question book-4.svg" src="//upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/50px-Question_book-4.svg.png" width="50" height="39" srcset="//upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/75px-Question_book-4.svg.png 1.5x, //upload.wikimedia.org/wikipedia/commons/thumb/6/64/Question_book-4.svg/100px-Question_book-4.svg.png 2x" data-file-width="262" data-file-height="204"/></a></div>
</td>
<td class="mbox-text"><span class="mbox-text-span"><b>この記事は<a href="/wiki/Wikipedia:%E6%A4%9C%E8%A8%BC%E5%8F%AF%E8%83%BD%E6%80%A7" title="Wikipedia:検証可能性">検証可能</a>な<a href="/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" title="Wikipedia:信頼できる情報源">参考文献や出典</a>が全く示されていないか、不十分です。</b><br/><a href="/wiki/Wikipedia:%E5%87%BA%E5%85%B8%E3%82%92%E6%98%8E%E8%A8%98%E3%81%99%E3%82%8B" title="Wikipedia:出典を明記する">出典を追加</a>して記事の信頼性向上にご協力ください。<small>(<span title="2014年7月">2014年7月</span>)</small></span></td>
</tr>
</table>