【R】Amazon 売れ筋ランキングの情報を取得する
RでAmazonの売れ筋ランキングの情報を取得する方法を紹介する。
URLの構造
URLは、以下のような構造になっているので、取得したいカテゴリを実際にアクセスして確認する。
1ページにつき50件となっており、50位以降を取得したい場合は、pgでページ数を指定する。
https://www.amazon.co.jp/gp/bestsellers/<カテゴリ>/?pg=<ページ>
例えば、本-ビジネス・経済のURLは、下記のように作成する。
category <- "books/466282"
pg <- 1
url <- sprintf("https://www.amazon.co.jp/gp/bestsellers/%s/?pg=%s", category, pg)
次に、作成したURLからHTMLを取得する。
スクレイピングには、{rvest}パッケージを利用する。
library(tidyverse)
library(rvest)
UserAgentを設定してランキングページの情報を抽出。
UA <- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
res <- html_session(url, httr::user_agent(UA))
HTMLの構造を確認しながら、下記の情報を取得する。
・ランク
・商品名
・URL
・金額
・サムネイル
・レビュー
・レビューの件数
ランクの抽出
ranks <- res %>%
html_nodes(".zg-badge-text") %>%
html_text()
商品名の抽出
item_names <- res %>%
html_nodes(".p13n-sc-truncate") %>%
html_text() %>%
stringi::stri_trim()
詳細ページのリンクの抽出
item_node <- res %>%
html_nodes(".a-list-item")
urls <- sapply(item_node, function(x){
a <- x %>% html_nodes(".a-link-normal") %>%
html_attr("href")
a[1]
})
urls <- sprintf("https://www.amazon.co.jp%s", urls)
金額の抽出
1商品に対して、下限と上限の金額が存在するケースがあるため「 - 」で結合する。
prices <- sapply(item_node, function(x){
paste(x %>% html_nodes(".p13n-sc-price") %>% html_text(), collapse = " - ")
})
サムネイルの抽出
thumbnails <- res %>%
html_nodes(".a-spacing-small") %>%
html_children() %>%
html_attr("src")
レビューの抽出
5つ星のうちXXとなっているので、削除して数字に変換する。
review_scores <- sapply(item_node, function(x){
a <- x %>%
html_nodes(".a-icon-alt") %>%
html_text()
ifelse(is_empty(a), NA, a)
})
review_scores <- as.numeric(gsub("5つ星のうち", "", review_scores))
レビュー件数の抽出
「,」を削除して数字に変換する。
review_nums <- sapply(item_node, function(x){
a <- x %>%
html_nodes(".a-icon-row") %>%
html_nodes(".a-size-small") %>%
html_text()
ifelse(is_empty(a), NA, a)
})
review_nums <- as.numeric(gsub(",", "", review_nums))
ランキングのデータフレームを作成
ranking_data <- tibble(
rank = ranks,
item_name = item_names,
price = prices,
url = urls,
thumbnail = thumbnails,
review_score = review_scores,
review_num = review_nums
)
ranking_data
この記事が気に入ったらサポートをしてみませんか?