【データの集めかた講座】楽天市場の商品情報を収集する
はじめに
ごあいさつ
ご高覧いただきありがとうございます.
ソフトウェアエンジニアのKitaharaです.
本日から3本立てで楽天市場の商品情報の収集方法を解説します!
一日目:商品価格ナビ製品検索APIで商品情報を収集
二日目:商品価格ナビ製品検索APIを使ってほしい商品の平均価格と市場に存在する数を収集
三日目:PaaSを使って自動値段監視システムを構築
完成物
最終的に商品情報を収集できるようになります.
==============================
product id: fc01d3ce5675a053b39efe453ea9d6a8
product name: Python実践機械学習システム100本ノック /秀和システム/下山輝昌
product number: 9784798063416
brand name:
image url: https://thumbnail.image.rakuten.co.jp/ran/img/2001/0009/784/798/063/416/20010009784798063416_1.jpg?_ex=64x64
genre id: 209118
genre name: プログラミング
==============================
product id: 17de51318a73e84ac3ac46f6da87a40f
product name: スッキリわかるPythonによる機械学習入門 /インプレス/フレアリンク
product number: 9784295009948
brand name:
image url: https://thumbnail.image.rakuten.co.jp/ran/img/2001/0009/784/295/009/948/20010009784295009948_1.jpg?_ex=64x64
genre id: 209118
genre name: プログラミング
==============================
...
==============================
product id: fc03df76a1a2709f6eafea87ffbb398e
product name: やさしく学ぶ機械学習を理解するための数学のきほん アヤノ&ミオと一緒に学ぶ 機械学習の理論と数学、実 /マイナビ出版/立石賢吾
product number: 9784839963521
brand name:
image url: https://thumbnail.image.rakuten.co.jp/ran/img/2001/0009/784/839/963/521/20010009784839963521_1.jpg?_ex=64x64
genre id: 101937
genre name: その他
作るものの確認
作るものを明確にしていきましょう.
今回はキーワードからプロダクトIDと目的のものか確認するためのデータを出力する関数を作ります.
キーワードからプロダクトIDを出力する関数
INPUT
app_id: application id
keyword: keywords
OUTPUT
product_id: Rakuten Product ID => use for searching
product_name: product name
product_No: version of product
product_brand: brand of product
product_release_date: date when product was released
product_image_url: small image of product
product_genre_id: genre id of product
product_genre_name: genre name of product
使用するものの確認
Python
プログラミング言語のひとつです.
型宣言等が無く, 初心者にも扱いやすい言語だと言われています
近年Deep Learningのライブラリが豊富であることから注目を集めている人気の言語です
Google Colab
Googleが提供するPythonの実行環境です
主要なライブラリがインストールされている状態で使うことができます
Chromeでアクセスするだけで利用することができます
環境構築が不要です
無料で使うことができます
環境構築
今回は事前に用意するパッケージはありません.
楽天Webサービスでアプリケーションを作成をして番号だけ控えてください.
プログラムの作成
エンコードの確認
エンコードを確認します.
今回使用するAPIのパラメーターにUTF-8でエンコードすることが必須になっているものがあるからです.
INPUT
import sys
sys.getdefaultencoding()
OUTPUT
utf-8
今回は気にしないでよさそうです.
リクエスト先のURLを作成
リクエスト用のURLを記述していきます.
変数の部分は直接URLに書いても動くのですが, 後々の利便性と可読性を向上させるために文字列に代入する方式で書いています.
変数 keyword には好きなものを入れてもらって問題ありません.
今回は「機械学習 本」としてみました.
INPUT
id = 'your_app_id'
keyword = '機械学習 本'
url = "https://app.rakuten.co.jp/services/api/Product/Search/20170426?applicationId={}&format=json&keyword={}"
print(url.format(id, keyword))
OUTPUT
https://app.rakuten.co.jp/services/api/Product/Search/20170426?applicationId=your_app_id&format=json&keyword=機械学習 本
リクエストの送信
準備ができたので早速リクエストを送信していきます.
INPUT
response = requests.get(url.format(id, keyword, genre_id))
response
OUTPUT
<Response [200]>
レスポンスが200以外の人は何等かの問題が発生しているのでこれまでのコードや通信環境等を確認してみてください.
結果の表示
INPUT
response.json()
OUTPUT
長くなりますが, この後の説明の時に戻って確認できるようにするために一つ目の製品をすべて表示させています.
{'GenreInformation': {'children': [], 'current': [], 'parent': []},
'Products': [{'Product': {'ProductDetails': [{'detail': {'name': '書名カナ',
'value': 'パイソン ジッセン キカイ ガクシュウ システム ヒャッポン ノック'}},
{'detail': {'name': '著者名', 'value': '下山輝昌、三木孝行'}},
{'detail': {'name': '著者名カナ', 'value': 'シモヤマ,テルマサ、ミキ,タカユキ'}},
{'detail': {'name': '発行者', 'value': '秀和システム'}},
{'detail': {'name': '発行者カナ', 'value': 'シユウワシステム'}},
{'detail': {'name': 'ページ数', 'value': '316p'}},
{'detail': {'name': 'サイズ', 'value': '22'}}],
'affiliateUrl': None,
'averagePrice': 2523,
'brandName': '',
'genreId': '209118',
'genreName': 'プログラミング',
'itemCount': 13,
'makerCode': '2097847980',
'makerName': '秀和システム',
'makerNameFormal': '秀和システム',
'makerNameKana': 'シユウワシステム',
'makerPageUrlMobile': 'http://m.product.rakuten.co.jp/category/209118/2097847980/',
'makerPageUrlPC': 'https://product.rakuten.co.jp/category/-/209118/2097847980/',
'maxPrice': 2640,
'mediumImageUrl': 'https://thumbnail.image.rakuten.co.jp/ran/img/2001/0009/784/798/063/416/20010009784798063416_1.jpg?_ex=128x128',
'minPrice': 1660,
'productCaption': '',
'productId': 'fc01d3ce5675a053b39efe453ea9d6a8',
'productName': 'Python実践機械学習システム100本ノック /秀和システム/下山輝昌',
'productNo': '9784798063416',
'productUrlMobile': 'http://m.product.rakuten.co.jp/product/fc01d3ce5675a053b39efe453ea9d6a8/',
'productUrlPC': 'https://product.rakuten.co.jp/product/-/fc01d3ce5675a053b39efe453ea9d6a8/',
'rank': 67,
'rankTargetGenreId': '209118',
'rankTargetProductCount': 10499,
'releaseDate': '2020年12月8日',
'reviewAverage': 4,
'reviewCount': 1,
'reviewUrlMobile': 'http://m.product.rakuten.co.jp/product/fc01d3ce5675a053b39efe453ea9d6a8/review/',
'reviewUrlPC': 'https://product.rakuten.co.jp/product/-/fc01d3ce5675a053b39efe453ea9d6a8/review/',
'salesItemCount': 10,
'salesMaxPrice': 2640,
'salesMinPrice': 2376,
'smallImageUrl': 'https://thumbnail.image.rakuten.co.jp/ran/img/2001/0009/784/798/063/416/20010009784798063416_1.jpg?_ex=64x64',
'usedExcludeCount': 10,
'usedExcludeMaxPrice': 2640,
'usedExcludeMinPrice': 2376,
'usedExcludeSalesItemCount': 10,
'usedExcludeSalesMaxPrice': 2640,
'usedExcludeSalesMinPrice': 2376}},
...
機械学習本を収集することができました!
欲しい情報の表示
欲しい情報を収集してみます.
INPUT
results = response.json()
items = results['Products']
for i in range(len(items)):
print('==============================')
print('product id: ',items[i]['Product']['productId'])
print('product name:',items[i]['Product']['productName'])
print('product number:',items[i]['Product']['productNo'])
print('brand name:',items[i]['Product']['brandName'])
print('image url:',items[i]['Product']['smallImageUrl'])
print('genre id:',items[i]['Product']['genreId'])
print('genre name:',items[i]['Product']['genreName'])
OUTPUT
==============================
product id: fc01d3ce5675a053b39efe453ea9d6a8
product name: Python実践機械学習システム100本ノック /秀和システム/下山輝昌
product number: 9784798063416
brand name:
image url: https://thumbnail.image.rakuten.co.jp/ran/img/2001/0009/784/798/063/416/20010009784798063416_1.jpg?_ex=64x64
genre id: 209118
genre name: プログラミング
==============================
product id: 17de51318a73e84ac3ac46f6da87a40f
product name: スッキリわかるPythonによる機械学習入門 /インプレス/フレアリンク
product number: 9784295009948
brand name:
image url: https://thumbnail.image.rakuten.co.jp/ran/img/2001/0009/784/295/009/948/20010009784295009948_1.jpg?_ex=64x64
genre id: 209118
genre name: プログラミング
==============================
...
==============================
product id: fc03df76a1a2709f6eafea87ffbb398e
product name: やさしく学ぶ機械学習を理解するための数学のきほん アヤノ&ミオと一緒に学ぶ 機械学習の理論と数学、実 /マイナビ出版/立石賢吾
product number: 9784839963521
brand name:
image url: https://thumbnail.image.rakuten.co.jp/ran/img/2001/0009/784/839/963/521/20010009784839963521_1.jpg?_ex=64x64
genre id: 101937
genre name: その他
ここまでくればPandasでデータの保存もできます.
INPUT
import pandas as pd
data = []
for i in range(len(items)):
data_i = [
items[i]['Product']['productId'],
items[i]['Product']['productName'],
items[i]['Product']['productNo'],
items[i]['Product']['brandName'],
items[i]['Product']['smallImageUrl'],
items[i]['Product']['genreId'],
items[i]['Product']['genreName']
]
data.append(data_i)
df = pd.DataFrame(data, columns=['product_id','product_name', 'product_no', 'brand_name', 'image_url', 'genre_id', 'genre_name'])
df.to_csv('item_data.csv')
OUTPUT
# NOTHING
データの確認はGoogle Colabの左側の部分からすることができます.
作成した関数
import requests
import pandas as pd
def search_product(app_id, keyword):
url = "https://app.rakuten.co.jp/services/api/Product/Search/20170426?applicationId={}&format=json&keyword={}"
response = requests.get(url.format(app_id, keyword))
results = response.json()
items = results['Products']
data = []
for i in range(len(items)):
data_i = [
items[i]['Product']['productId'],
items[i]['Product']['productName'],
items[i]['Product']['productNo'],
items[i]['Product']['brandName'],
items[i]['Product']['smallImageUrl'],
items[i]['Product']['genreId'],
items[i]['Product']['genreName']
]
data.append(data_i)
df = pd.DataFrame(data, columns=['product_id','product_name', 'product_no', 'brand_name', 'image_url', 'genre_id', 'genre_name'])
df.to_csv('item_data.csv')
おわりに
今回はPythonを使って楽天市場の商品情報を収集する方法を解説しました!
参考になったという方はぜひハートボタンを押していってください!
モチベーションが上がります!
記事内で不明な点等ございましたら気軽にご連絡ください.
Twitter: @kitahara_dev
email: kitahara.main1@gmail.com
この記事が気に入ったらサポートをしてみませんか?