2chのスレをRのrvestを用いてスクレイピングする
前回したらばのスレをRのrvestを用いてスクレイピングする - saikeisai's diaryしたらばでやってみたが今回は2chでやってみる。
ちなみに、xpathなどの指定はchromeのdeveloper toolでcopy xpathというのができるのでそこから試行錯誤しています。
今回も、スレッドのURLを与えた際にスレッドタイトルとレスの内容とレス日付を求めた。
以下にコードを示す。
library("rvest") #library(stringr) url<-"https://echo.2ch.net/test/read.cgi/tech/1384950421/" #2ch html<-read_html(x=url) #スレタイ title_nodes<-html_nodes(html,"h1.title") thread_title<-html_text(title_nodes) thread_title<-gsub("\\n","",x=thread_title) #以下はスマートじゃないので修正 # num_res_nodes<-html_nodes(html,xpath='/html/body/div[1]/div[1]/ul/li[1]') # num_res<-str_match_all(num_res_nodes, "[0-9]+") %>% as.numeric # # res<-c();date<-c(); # for(i in 1:num_res){ # res_xpath_expr<-paste("//*[@id=",i,"]/div[2]/span") # res_nodes<-html_nodes(html,xpath=res_xpath_expr) # date_xpath_expr<-paste("//*[@id=",i,"]/div[1]/span[3]") # date_nodes<-html_nodes(html,xpath=date_xpath_expr) # res<-c(res,html_text(res_nodes)) # date<-c(date,html_text(date_nodes)) # } res_nodes<-html_nodes(html,xpath='//*[@class="escaped"]') res<-html_text(res_nodes) date_nodes<-html_nodes(html,xpath='//*[@class="date"]') date<-html_text(date_nodes) date<-gsub("\\((月|火|水|木|金|土|日)\\)"," ",date) date<-gsub(" "," ",date) date_POSIX<-as.POSIXlt(date,format = "%Y/%m/%d %H:%M:%S.%OS")
今回レス数を求める際に、スレのstatsのところにレス数が書いてあるのでそこから取り出してfor文でレスと日付を取り出した。
つまり、スレのstatsがなければ取り出せないのである。
pinkサーバなどはstatsがないので取り出せない。
for文で取り出すのは美しくない気もするので他の方法をご存知の方がいらしたら教えて欲しいです。
ちゃんとxpathで取れました。
次はpinkをやってみたい。