爆サイ(bakusai)のスレをRのrvestを用いてスクレイピングする
これまで2chやしたらばをスクレイピングしてきた。
2chのスレをRのrvestを用いてスクレイピングする - saikeisai's diary
pink.2chのスレをRのrvestを用いてスクレイピングする - saikeisai's diary
したらばのスレをRのrvestを用いてスクレイピングする - saikeisai's diary
今回は爆サイをスクレイピングします。
爆サイは2chやしたらばに比べて全レス表示ができないので見づらい。
今回も、スレッドのURLを与えた際にスレッドタイトルとレスの内容とレス日付を求めた。
以下にコードを示す。
library("rvest") original_url<-"http://bakusai.com/thr_res/acode=3/ctgid=103/bid=412/tid=3855080/" #bakusai html<-read_html(x=original_url,encoding="CP932") #スレタイ title_nodes<-html_nodes(html,xpath='//*[@id="breadcrumbs"]/span[4]/span') thread_title<-html_text(title_nodes) #一度に全レスを取得することができないのでページ数を取得して各ページで取得する num_page_nodes<-html_nodes(html,xpath='//*[@class="paging_numberlink"]') num_page<-length(num_page_nodes)+1 getRes <- function(html){ res_nodes<-html_nodes(html,xpath='//*[@class="resbody"]') res<-html_text(res_nodes) res<-gsub("\\n","",x=res) res<-gsub(" ","",x=res) return(res) } getDate <- function(html){ date_nodes<-html_nodes(html,xpath='//*[@itemprop="commentTime"]') date<-html_text(date_nodes) return(date) } res<-c();date<-c(); for(i in 1:num_page){ url<-paste0(original_url,"p=",i,"/tp=1/rw=1/") url_html<-read_html(x=url,encoding="CP932") res<-c(res,getRes(html=url_html)) date<-c(date,getDate(html=url_html)) } date<-as.POSIXlt(date,format = "%Y/%m/%d %H:%M")
最初にpageの数を取得してpageごとにスクレイピングを行って統合している。
実際にやってみるとまれに文字コードの問題でエラーになって取得できないことがあるようだ。
これは、おそらく
r - ページをスクレイピングしようと文字コードエラーがでます - スタック・オーバーフロー
こういう問題だと思う。解決策はわからない。
ちなみに私はWindows8.1の日本語環境です。