スクレイピング

【R】Rを使ってXPathをスクレイピング【XPathの説明あり】

xpath

XPathって何?

XPathを使ったスクレイピングってなに?

という方でも、わかりやすく説明します。

もしエラーがおきたらteratailで質問してみてください。エンジニアさんやプログラマーさんが教えてくれますよ。

XPathとは?

XPathはXML文章中の要素、属性値などを指定するための言語。

XMLってのは、情報の管理をするための言語みたいな感じですわ(今は、知らなくて良いです)

じゃあXMLで書かれたものしか、スクレイピングできないのか?そんなことはないです。

HTMLはXMLの一部です。

▼まとめ

XPathで、HTMLの要素を指定して、取り出すことができる

DOMに似ている

dom

以前の記事で、DOMがツリー構造になっているという話をしました。

XPathもXML(HTML)をツリー構造として、考えています。ちょっくら思い出しておいてください。

スクレイピングするサイト

石田基広さんのサイトを使います。一度、ご覧ください。

>>>今回スクレイピングするサイト

「Rによるスクレイピング入門」という本を参考にさせていただきます。

サイト自体は、めっちゃシンプルですよね。石田基広さんのサイトは、スクレイピングをする際に、とても勉強となります。

今回使うパッケージ

パッケージ名説明
rvestWebページから情報を抽出する作業を簡単にしてくれる
dplyrデータフレームを簡単に操作できる(パイプ演算子を使う)
magrittrオブジェクトの一部の抽出または置換(パイプ演算子を使う)

HTMLでスクレイピングするときと同様に、HTMLドキュメントを読み込みする必要があります。

HTMLドキュメントをDOMにして読み込む

いつも通り、この作業をお願いします。

パッケージの読み込み

library(rvest)
library(magrittr)
library(dplyr)

rvestread_htmlを使って、DOMという構造にしていきます。

DOMにする

test3 <- read_html(“https://IshidaMotohiro.github.io/sample_check/simple2.html”)

test3

{xml_document}

<html>

[1]<head>\n<meta http-equiv=”Content-Type” content=”text/html; charset=U …

[2] <body>\n <div>\n <p>pタグ</p>\n </div>\n <p class=”green”>classを使 .

ページのソースを確認

左HTMLドキュメント
右HTMLソースコード

csscss

XPathを使って要素を抽出する際には、ページのソースを見る必要があります。

ソースコードを見るには、【右クリック】→【ページのソースを表示】でみることができます(ブラウザによって変わる)

ツリー構造を確認する

css

 

<html>要素の下に<body>要素、その下に<p>要素が2つあります。<p class=”green”>classを使った例</p>と<p id=”red”>idを使った例</p>です。

xpath的にいうと、/html/body/p というように表記します。

<html>要素の下に<body>要素、その下に<div>要素、その下にp要素があります。<p>pタグ</p>です。

xpath的にいうと、/html/body/div/p というように表記します。

なんとなくわかりますよね。

html要素という大きな木に、だんだん枝が生えてきてるような感じです。このようなツリー構造は大事です。

スポンサーリンク

ツリー構造(階層)全て表記して抽出

では、xpathを利用して、抽出していきます。

階層全表記

test3 %>% html_nodes(xpath = “/html/body/p”)

test3

{xml_nodeset (2)}
[1] <p class=”green”>classを使った例</p>
[2] <p id=”red”>idを使った例</p>

のような結果になります。

XPathを利用するときは、xpath = “ツリー構造(階層)”のように表記します。

/html/body/pはhtml要素の下にあるbody要素、その下にあるp要素を指定してます。

階層全表記

test3 %>% html_nodes(xpath = “/html/body/div/p”)

test3

{xml_nodeset (1)}
[1] <p>pタグ</p>

の結果になります。html要素の下にあるbody要素、その下にあるdiv要素、その下にあるp要素を指定して、抽出しています。

XPathの基本です。理解しておくことをおすすめします。

値(テキスト)部分を抽出

HTMLやCSSのときと同様、要素の値(テキスト)部分を抽出することもできます。

値(テキスト)抽出

test3 %>% html_nodes(xpath = “/html/body/p”) %>% html_text()

[1] “classを使った例” “idを使った例”

html_nodes(xpath=”/html/body/p”) でp要素を指定して、html_text()で値(テキスト部分)を抽出しています。

ツリー構造(階層)を無視して抽出

html要素とかbody要素とか気にしないで、とにかくp要素を抽出したい

そのようなこともできます。

階層を気にしないで抽出

test3 %>% html_nodes(xpath = “//p”)

[1] <p>pタグ</p>

[2] <p class=”green”>classを使った例</p>

[3]<p id=”red”>idを使った例</p>

//pで階層が異なる要素でも、抽出することができます。

テキスト部分抽出

test3 %>% html_nodes(xpath = “//p”) %>% html_text()

とうぜん、テキスト部分を抽出することができます。

一部固定で階層を気にしないで抽出(直接的)

ある要素の下にある要素のみを抽出することもできます。

body要素の下にあるp要素のみを抽出します。

直接的に触れている要素抽出

test3 %>% html_nodes(xpath = “//body/p”)

{xml_nodeset (2)}

[1] <p class=”green”>classを使った例</p>

[2] <p id=”red”>idを使った例</p>

この結果になります。body要素の下にある要素のみなので、div要素の下にあるp要素は抽出されません。

一部固定で階層を完全に気にしないで抽出(直接的・間接的)

ある要素の下にある要素をすべて抽出したい

ということもできます。

先ほどの場合は、ある要素と下にある要素(直接的に触れている要素)のみを抽出しました。今回は、間接的に触れている要素も抽出できます。

直接的・間接的に触れている要素抽出

test3 %>% html_nodes(xpath = “//body//p”)

{xml_nodeset (3)}

[1] <p>pタグ</p>

[2] <p class=”green”>classを使った例</p>

[3] <p id=”red”>idを使った例</p>

//bodyでbody要素の下にある要素を指定して、//pでbody要素の下に直接的にある要素やdiv要素の下にある要素をすべて、抽出しています。

descendantを利用

直線的・間接的に触れている要素を、「descendant」を利用することで、抽出できます。

descendant利用

test3 %>% html_nodes(xpath = “//body/descendant::p”)

{xml_nodeset (3)}
[1]<p>pタグ</p>
[2]<p class=”green”>classを使った例</p>
[3]<p id=”red”>idを使った例</p>

この結果になります。

要素1/descendant::要素2とすることで、要素1の下に直線的に触れている要素と間接的に触れている要素を抽出できます。

まとめ

まとめ

  • XPathはXML文章中の要素、属性値などを指定するための言語
  • XMLの一部にHTMLが含まれている
  • HTMLをツリー構造として考えて、XPathを使う

▼ゼロから始めるR言語にもどる▼

R言語
【随時更新】ゼロから始めるR言語【2018/3/30日更新】RとRStudioのインストールからグラフ・図・分析、テキストマイニング、スクレイピングなどをやっていきます。ネットでRを勉強したい人は是非ご覧ください。...

参考文献

データサイエンティストになりたいなら

  • データサイエンティストになりたいけど、漠然とRの勉強をしている

もしそうならば、戦略的に勉強しましょう。戦略的に勉強しなければデータサイエンティストになるのは夢のままになってしまう可能性があります。

データサイエンティストになるためのおすすめの勉強方法・講座を3つご紹介します。

①通勤講座でデータサイエンティストの講座を受ける

  • ビジネスにデータを活用したいが方法が分からない。
  • ビックデータをどう扱えばよいか分からない。
  • データサイエンティストになりたいが、どうすればいいのか分からない。

このような場合、データサイエンティスト基礎講座 を受けてるのはどうでしょうか。動画によって、上のような悩みを解決してくれます。

まずデータサイエンティスト の基礎を学んでみて、ビジネススキルが足りなかったらUdemy で勉強するのが良いです。

いまなら10%クーポンもありますし、無料の動画もあります。今行動しないと一生やりませんので、もう少し下を見てからで良いのでご覧ください。

▼まずデータサイエンティストの基礎を学ぶ▼

データサイエンティストの基礎を学ぶ>>

②Udemyのデータサイエンティスト講座を受ける  

「Udemy」も動画で学ぶタイプの講座です。データサイエンティストになるための講座がそこそこあります。

通勤講座とちがうのが安さです。どちらも内容の質が良いことは間違えないのですが、Udenyは安めです。

「自分この部分の知識がないな」と思ったときの補強でも使えますね。一度講座をとって気に入らなかったら、全額返金できます。

▼データサイエンティストの基礎を学んだり、知識の補強をする▼

 Udemyのデータサイエンティスト講座を受ける>>

③データサイエンティスト育成スクールにいく

本気でデータサイエンティストになりたいなら、このスクールに行くのがおすすめです。

データサイエンティストに必要な知識は膨大です。統計学、機械学習、人工知能、データベース、プログラミング、ビジネススキルなどなど。

その知識をデータサイエンティストとしての経験がある先生たちが、オフラインで教えてくれます。

動画です。ご覧ください。

どうですか、めっちゃ良いですよね。ここは他の講座と違うなと思った部分があるのですが、転職支援もしてくれます。

さらに

データサイエンティスト全コースを一括で申し込んでいただいた方のみ、
ブートキャンプ終了時にご満足いただけない場合は受講料を全額返金します。

返金保障もあります。

もしまだ心配な方は説明会もありますので、いって見てください。

  • 未経験からデータサイエンティスト目指せる(Rを触っているあなたならもっと安心)
  • 返金保障あり
  • データサイエンティストに必要な知識を学べる
  • オフライン
  • データサイエンティスト経験がある先生に質問ができる
  • 転職支援あり

もう一度言います。本気でデータサイエンティストを目指すならおすすめです。

▼データサイエンティストになる▼

未経験からデータサイエンティストになる>> 

どれにしますか

①と②の場合はまず基礎を学んで、足りないところを補充して転職という感じです。③は転職支援もあるので安心です。

思いたったときに行動しなければ意味がありません。将来的にデータサイエンティストになりたいなら今すぐ行動しましょう。

データサイエンティストの基礎を学ぶ
通勤講座のデータサイエンティストの講座を受ける  

データサイエンティストの基礎を学んだり、知識の補強をする
Udemyのデータサイエンティスト講座を受ける  

本気でデータサイエンティストを目指す
データサイエンティスト育成スクールにいく

 

ABOUT ME
さぎのみや
さぎのみや
ゲーム開発を手助けるメディア【ユニシャー】を運営しているさぎのみやの個人ブログです。自分の考えや役にたったことを書いております。自分の芯がある人が好きです。→Amazonほしいものリスト
ゲーム開発を手助けるメディア「Unishar-ユニシャー」
  • Unityを勉強したい
  • とりあえずUnityを使ってゲームを作りたい

このような悩みを解決してくれる、アクセス急上昇中のUnityメディア「Unishar-ユニシャー」

Unityでのゲーム開発に役立つことばかりです。

Unity専門メディア「Unishar-ユニシャー」→