Rでmixiをスクレイピングしたときのページネーションが途中で止まったりCSVがうまく吐き出せない問題
解決したいこと
Rのrvestでmixiのmixiコミュニティーというグループ一覧(ページネーションで一覧化されている)で、ログインなしでアクセスできる範囲で(ログインをセッション保持してのスクレイピングがうまくいかなかったため)行おうと試行錯誤し、下記のようにある程度できるものの、
【問題1】ページネーションの7ページ目までで止まってしまう(全体で100強あるはず)
【問題2】CSVに吐き出した時に複数のグループが1行にマージされて表示されてしまう
といった2つの問題だけ色々試したり検索エンジンで調べたのですが解決しませんでした。
ぜひお知恵をお貸しくださいmm
(【問題2】に関して)うまくCSVに書き出せた部分
(【問題2】に関して)1行に複数行がマージされてしまう例
該当するソースコード
library("rvest")
library("tidyverse")
library("curl")
URL.1 <- "https://mixi.jp/search_community.pl?keyword=%A5%DE%A5%DE&search_mode=title&category_id=0&sort=last_comment-d&page=1&search_type=community"
postNum1221 <- read_html(URL.1, encoding = "euc-jp") %>%
html_nodes(., xpath="/html/body/div[1]/div[3]/div[1]/div[2]/p[1]/span") %>%
str_replace_all(c('<span class="COMMUNITY_searchResultStatus__count">'='','</span>'='')) %>%
as.integer()
pageNum1221 <- round(postNum1221/50)
#できれば各グループのURLにアクセスして中身から情報とるチャレンジも!
title.1 <- read_html(URL.1, encoding="euc-jp") %>%
html_nodes(., css="a.COMMUNITY_resultList__contentsTitleText") %>%
html_text() %>%
data.frame()
detail.1 <- read_html(URL.1,encoding="euc-jp") %>%
html_nodes(., css="p.COMMUNITY_resultList__detailText") %>%
html_text() %>%
str_replace_all(c(" "="")) %>%
data.frame()
joiners.1 <- read_html(URL.1, encoding="euc-jp") %>%
html_nodes(., css="li.COMMUNITY_resultList__statusItem.COMMUNITY_resultList__statusItem--member") %>%
html_text() %>%
str_replace_all(c("人が参加中"="")) %>%
as.integer() %>%
data.frame()
for(i in 2:pageNum){
Sys.sleep(0.5)
URL <- paste("https://mixi.jp/search_community.pl?keyword=%A5%DE%A5%DE&search_mode=title&category_id=0&sort=last_comment-d&page=",i,"&search_type=community",sep="")
title.0 <- read_html(URL, encoding="euc-jp") %>%
html_nodes(., css="a.COMMUNITY_resultList__contentsTitleText") %>%
html_text() %>%
data.frame()
title.1 <- bind_rows(title.1, title.0)
detail.0 <- read_html(URL,encoding="euc-jp") %>%
html_nodes(., css="p.COMMUNITY_resultList__detailText") %>%
html_text() %>%
str_replace_all(c(" "="")) %>%
data.frame()
detail.1 <- bind_rows(detail.1, detail.0)
joiners.0 <- read_html(URL, encoding="euc-jp") %>%
html_nodes(., css="li.COMMUNITY_resultList__statusItem.COMMUNITY_resultList__statusItem--member") %>%
html_text() %>%
str_replace_all(c("人が参加中"="")) %>%
as.integer() %>%
data.frame()
joiners.1 <- bind_rows(joiners.1, joiners.0)
}
contents.1 <- cbind(title.1, detail.1, joiners.1)
colnames(contents.1) <- c("title", "detail", "joiners")
contents.1 <- contents.1 %>% arrange(desc(joiners.1))
write.csv(contents.1, "contents.1.csv", fileEncoding="CP932")
自分で試したこと
1)パスの指定方法(XMLパス,CSSパスなどのやり方)を色々変えてみた
2)並び替えや bind_rowsで結合するタイミングなど色々なパターンで試してみた
3)ログインしてセッションを保持してのスクレイピングを試してみた
何卒よろしくお願いしいます!
0