はだだだだ

定食にサラダは不要だと思う。

MENU

Rでスクレイピングをやってみた

以下の記事で分析を行う際に、ウェブページからNBA選手の年俸データを取得しました。
年毎にページが分かれているため、Rでウェブスクレイピングをして、データ取得を自動化しようと思います。

hadadada00.hatenablog.com

ウェブスクレイピングのやり方については以下のサイトを参考にしました。

Chapter 24 Web Scraping | Introduction to Data Science

ライブラリはrvestを使用します。まずは、データ取得元のURLをセットします。

library(rvest)
library(tidyverse)

# set url 
url_domain <- "https://hoopshype.com/salaries/players/"
url_page <- "2017-2018"
url <- paste0(url_domain,url_page)

次に、htmlファイルを取得し、tableタグの中身を抽出します。

# get html
h <- read_html(url)

# parse html
tab <- h %>% html_nodes("table")

tableタグがついている要素を確認します。

tab

> tab
{xml_nodeset (1)}
[1] <table class="hh-salaries-ranking-table hh-salaries-table- ...

tableタグがついている要素は1つだけのため、これを抽出してデータフレームにすればよさそうです。
データフレームへの変換後、データの中身を確認します。

# get salary table from tab
table <- tab[[1]] %>% html_table()

# check the table
head(table)

>head(table)
  X1             X2          X3          X4
1 NA         Player     2017/18  2017/18(*)
2  1  Stephen Curry $34,682,550 $35,678,476
3  2   LeBron James $33,285,709 $34,241,524
4  3   Paul Millsap $30,769,231 $31,652,784
5  4 Gordon Hayward $29,727,900 $30,581,550
6  5  Blake Griffin $29,512,900 $30,360,377

データは取得できていますが、1行目がカラム名になっており、カラム名が未定義になっています。
また、X1列は不要です。

不要な列の削除、列名の設定、必要な列(年)の追加をしてデータフレームを整えます。

# create data frame
table <- table %>% 
  mutate(n = row_number(),
         year = "2017-2018",
         name = X2,
         salary = X3,
         salary_adj = X4) %>% 
  filter(n != 1) %>% 
  select(year, name, salary, salary_adj)

head(table)

>head(table)
> head(table)
       year           name      salary  salary_adj
1 2017-2018  Stephen Curry $34,682,550 $35,678,476
2 2017-2018   LeBron James $33,285,709 $34,241,524
3 2017-2018   Paul Millsap $30,769,231 $31,652,784
4 2017-2018 Gordon Hayward $29,727,900 $30,581,550
5 2017-2018  Blake Griffin $29,512,900 $30,360,377
6 2017-2018     Kyle Lowry $28,903,704 $29,733,687

これでデータスクレイピングができました。

追記:
取得元のサイトでは2000-2001シーズンから、2017-2018シーズンまでのデータが取得できます。
今後の分析で使用することを踏まえて、まとめて取得してpackage化しておこうと思います。

作業内容は別記事(以下)に記載しております。
hadadada00.hatenablog.com

以上