「.revRvwUserDisp」の属性で読み込まれるデータが広範囲過ぎるので、読み込んだ後で、不要な部分を削る処理をしています。
デザインとか携帯性といった6項目の評価は、結局それぞれの評価の数字だけを残す形にしています。
もっとよりよいスクレイピング方法があると思いますが、力量不足で対応できていません。もっとシンプルに、簡単に取り込める方法がないかどうかを模索中です。
いずれにしても、「R」のコードでデータを処理する方法では、Excelなどを一切利用せずに、データ取得、前処理、分析、グラフ作成まで一気通貫でできるのがいいです。
【Rのコード例】
url_txt <- "https://review.rakuten.co.jp/item/1/300683_10000223/"
pages_num <- 14
get_r_reviews <- NULL
df_reviews <- NULL
for(i in seq(1, pages_num, by = 1)) {
url <- paste0(url_txt,i,'.','1/')
page <- read_html(url)
get_r_reviews <- page %>%
html_nodes ('.hreview') %>%
map_df(~list( name = html_nodes(.x, '.reviewer') %>%
html_text(.,trim = FALSE) %>%
{if(length(.) == 0) NA else .},
title = html_nodes(.x, '.summary') %>%
html_text(.,trim = FALSE) %>%
{if(length(.) == 0) NA else .},
stars = html_nodes(.x, '.value') %>%
html_text() %>%
{if(length(.) == 0) NA else .},
date = html_nodes(.x, '.dtreviewed') %>%
html_text() %>%
{if(length(.) == 0) NA else .},
reviews = html_nodes(.x, '.description') %>%
html_text(.,trim = FALSE) ,
helpful = html_nodes(.x, '.revEntryAnsNum') %>%
html_text(.,trim = FALSE) %>%
{if(length(.) == 0) NA else .} ,
age_sex = html_nodes(.x, '.revUserFaceDtlTxt') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(., "購入者|レビュー投稿.*|.*件","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
sex = html_nodes(.x, '.revUserFaceDtlTxt') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(., "購入者|レビュー投稿.*|.*件|.*代|以上","") %>%
str_replace_all(., "レビュー投稿.*","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
age = html_nodes(.x, '.revUserFaceDtlTxt') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(., "購入者|レビュー投稿|.*件|男性|女性","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
posts = html_nodes(.x, '.revUserFaceDtlTxt') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(., ".*代.*|購入者|レビュー投稿|件","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
デザイン = html_nodes(.x, '.revRvwUserDisp') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(.,"デザイン:|携帯性.*|音漏れ防止.*|外音遮断性.*|フィット感.*|音質.*|商品を使う人.*|購入した回数.*|商品の使いみち.*","") %>%
str_replace_all(., " ","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
携帯性 = html_nodes(.x, '.revRvwUserDisp') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(.,"デザイン.*|携帯性:|音漏れ防止.*|外音遮断性.*|フィット感.*|音質.*|商品を使う人.*|購入した回数.*|商品の使いみち.*","") %>%
str_replace_all(., " ","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
音漏れ防止 = html_nodes(.x, '.revRvwUserDisp') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(.,"デザイン.*|携帯性.*|音漏れ防止:|外音遮断性.*|フィット感.*|音質.*|商品を使う人.*|購入した回数.*|商品の使いみち:.*","") %>%
str_replace_all(., " ","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
外音遮断性 = html_nodes(.x, '.revRvwUserDisp') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(.,"デザイン.*|携帯性.*|音漏れ防止.*|外音遮断性:|フィット感.*|音質.*|商品を使う人.*|購入した回数.*|商品の使いみち.*","") %>%
str_replace_all(., " ","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
フィット感 = html_nodes(.x, '.revRvwUserDisp') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(.,"デザイン.*|携帯性.*|音漏れ防止.*|外音遮断性.*|フィット感:|音質.*|商品を使う人.*|購入した回数.*|商品の使いみち.*","") %>%
str_replace_all(., " ","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
音質 = html_nodes(.x, '.revRvwUserDisp') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(.,"デザイン.*|携帯性.*|音漏れ防止.*|外音遮断性.*|フィット感.*|音質:|商品を使う人.*|購入した回数.*|商品の使いみち.*","") %>%
str_replace_all(., " ","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
usage1 = html_nodes(.x, '.revRvwUserDisp') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(.,"デザイン.*|携帯性.*|音漏れ防止.*|外音遮断性.*|フィット感.*|音質.*|トップス.*|商品を使う人.*|購入した回数.*|商品の使いみち:","") %>%
str_replace_all(., " ","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
usage2 = html_nodes(.x, '.revRvwUserDisp') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(.,"デザイン.*|携帯性.*|音漏れ防止.*|外音遮断性.*|フィット感.*|音質.*|トップス.*|商品の使いみち.*|購入した回数.*|商品を使う人:","") %>%
str_replace_all(., " ","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both") ,
usage3 = html_nodes(.x, '.revRvwUserDisp') %>%
html_text(.,trim = FALSE) %>%
str_replace_all(.,"デザイン.*|携帯性.*|音漏れ防止.*|外音遮断性.*|フィット感.*|音質.*|トップス.*|商品の使いみち.*|商品を使う人.*|購入した回数:","") %>%
str_replace_all(., " ","") %>%
str_replace_all(., " ","") %>%
str_trim(., side = "both")
))
df_reviews <- rbind(df_reviews, get_r_reviews)
print(i)
Sys.sleep(5)
}
write.csv(df_reviews,"rakuten_reviewsbose.csv")
df_r <- read.csv("rakuten_reviewsbose.csv",header = TRUE, na.strings=c("","NA"))
view(df_r)
---------------------------------------------------
0 件のコメント:
コメントを投稿