libs <- c("bench", "tidyverse", "yaml", "rvest")
for (lib in libs)
require(lib, character.only = TRUE)
config <- read_yaml( "config.yaml" )
read_htmlはHTMLドキュメントをDOM構造に 返還をしているらしい.
# HTMLをDOM変換
kabu_url <- "https://kabutan.jp/stock/kabuka?code=0000"
url_res <- read_html(kabu_url)
url_res
## {xml_document}
## <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset= ...
## [2] <body>\r\n<!-- Google Tag Manager -->\r\n<noscript><iframe src="//ww ...
DOMの説明で次のような文章があったが, 「樹木のような階層構造」っていう言い方は通常通じるものなのだろうか? 樹木と構造がリンクするような知識の方には不要だし, はじめてHTMLを見る人には意味がわからない気がする.
DOMとは、HTMLの要素をを樹木のような階層構造に変換した者です.
読み込んだDOMからタイトルを抽出する.
# 本ではCSSセレクタが, html > head > titleになっている
url_title <- html_nodes(url_res, css = "head > title")
url_title
## {xml_nodeset (1)}
## [1] <title>日経平均 (日経平均) 【0000】:株価時系列データ [日々/週間/月間] | 株探</title>\n
抽出したタイトル要素から中身を抽出.
title <- html_text(url_title)
title
## [1] "日経平均 (日経平均) 【0000】:株価時系列データ [日々/週間/月間] | 株探"
一連の処理をパイプで記述すると次のようになる.
title2 <-
kabu_url %>%
read_html() %>%
html_nodes(css = "head > title") %>%
html_text()
title2
## [1] "日経平均 (日経平均) 【0000】:株価時系列データ [日々/週間/月間] | 株探"
表を直接読み込む. XPathはChoromのデベロッパーツールから, 要素を右クリックすることで, Copy→Copy XPathを実行した結果を貼り付ける
kabuka <-
kabu_url %>%
read_html() %>%
html_node(xpath = '//*[@id="stock_kabuka_table"]/table[2]') %>%
html_table()
head(kabuka)
複数ページにわたる表のアドレスをURLから推定し, そのURLに対してスクレイピングをする.
# アロケート
urls <- NULL
kabukas <- list()
# ベージ番号抜きのURLを用意
base_url <- "https://kabutan.jp/stock/kabuka?code=0000&ashi=day&page="
# ページ1~5に対して処理をする
for (i in 1:5) {
pgnum <- as.character(i)
urls[i] <- paste0(base_url, pgnum)
kabukas[[i]] <- read_html(urls[i]) %>%
html_node(xpath = '//*[@id="stock_kabuka_table"]/table[2]') %>%
html_table() %>%
dplyr::mutate_at("前日比", as.character)
Sys.sleep(1)
}
dat <- dplyr::bind_rows(kabukas)
e-Statの小地域境界(シェープファイル)が 逆ジオコーディングに使われているわしい?? 逆ジオコーディングにそんなめんどくさいことをしているのか? というか, 小地域統計境界がシェープファイルと呼ばれているわけでは ないのでないか?
といーか, RSeleniumがインストールできなかったので, 今回は諦める.
いつも思うのだけど, Rでスクレイピング系は再現できないことが多いので, Pythonに任せた方が良いと思う…
…と思ってたけど, サポートページで更新されていた.
install.packages("devtools")
library(devtools)
install_github("johndharrison/binman")
install_github("johndharrison/wdman")
install_github("ropensci/RSelenium", force=TRUE)
小地域統計をRSeleniumでダウンロードする. サーバを立ち上げようとすると, JAVAを いれろって怒られるので保留. やりたくなったらやる.
# chromeのドライバとSeleniumサーバの準備
# wdman::selenium(retcommand = TRUE)