こんにちは、ともろう(@tomorrowSLog)です。
Google ColabでDMM APIを扱ってデータ取得をしてみたのでその知見を備忘録としてまとめます。
- コード全文
- ロードマップ
- まとめ

コード全文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
import pandas as pd import requests import json import time APIID = '' ID = 'tomowarkar-990' counter = 0 data = {"name":[], "height":[], "cup":[], "hip":[], "waist":[], "bust":[], "blood_type":[], "birthday":[]} AV_df = pd.DataFrame(data) start = time.time() for keyword in AV: r = requests.get('https://api.dmm.com/affiliate/v3/ActressSearch?api_id=' + APIID + '&affiliate_id=' + ID + '&keyword=' + keyword + '&output=json').content r= json.loads(r) try: r = r['result']['actress'][0] except: pass try: name = r['name'] except: name = "" try: height = r['height'] except: height = "" try: cup = r['cup'] except: cup = '' try: hip = r['hip'] except: hip ='' try: waist = r['waist'] except: waist = '' try: bust = r['bust'] except: bust = '' try: blood_type = r['blood_type'] except: blood_type = '' try: birthday = r['birthday'] except: birthday = '' se = pd.Series([name, height, cup, hip, waist, bust, blood_type, birthday], ["name", "height", "cup", "hip", "waist", "bust", "blood_type", "birthday"]) AV_df = AV_df.append(se, ignore_index=True) counter +=1 sec = int(time.time() - start) print('{}% finished, time: {}, {} min remaining'.format(counter//9763*100, sec, sec * (9763/counter -1)//60)) print("completed") from google.colab import files AV_df.to_csv("AV.csv") files.download('AV.csv') |
少し端折っているが全体はこんな感じ。
途中真ん中あたりのfor keyword in AV:のAVはAV女優の名前をリスト型で入れてある。

この記事のoutput.csvだ。
参考
output.csvgithub.com
githubにもデータを公開しています。
以下のコードで使えるようになるはず。
1 2 3 |
url = 'https://raw.githubusercontent.com/tomowarkar/blog_content/master/dataset/output.csv' df = pd.read_csv(url) AV = list(df['name']) |
ロードマップ
- データを入れる型を作る
- DMM APIをたたく
- 必要な情報を取り出す
- データを格納
- 2~4をループ
- 最終データをcsv形式でダウンロード
データを入れる型を作る
1 2 3 4 5 6 7 8 9 10 11 |
data = {"name":[], "height":[], "cup":[], "hip":[], "waist":[], "bust":[], "blood_type":[], "birthday":[]} AV_df = pd.DataFrame(data) |
毎度おなじみ感。
今回は8項目のデータを取得していく。
DMM APIをたたく
まずはDMM apiを扱う各種設定を終わらせておこう。
参考 DMM Webサービスdmm.comAPIIDはこのページから確認ができる。
参考 API IDの確認dmm.comIDは’ユーザーネーム-990’という形にしよう。(990~999までの間に設定)
1 2 3 4 5 |
APIID = '' ID = 'tomowarkar-990' r = requests.get('https://api.dmm.com/affiliate/v3/ActressSearch?api_id=' + APIID + '&affiliate_id=' + ID + '&keyword=' + keyword + '&output=json').content r= json.loads(r) |
その都度挙動の確認をしていくと良い
必要な情報を取り出す
参考 リファレンス 女優APIdmm.com女優APIのリファレンスを見て、得体情報がどこに入っているかを確認しよう。
今回はresult>actressの部分以降に得たい情報がある。
APIをたたくキーワードの女優の名前はDMMのサイトからスクレイピングしたので検索に引っかかった一番目を取得すれば大丈夫だろう。
エラーが出て処理が止まらないようにしっかり対策をしておく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
try: r = r['result']['actress'][0] except: pass try: name = r['name'] except: name = "" try: height = r['height'] except: height = "" try: cup = r['cup'] except: cup = '' try: hip = r['hip'] except: hip ='' try: waist = r['waist'] except: waist = '' try: bust = r['bust'] except: bust = '' try: blood_type = r['blood_type'] except: blood_type = '' try: birthday = r['birthday'] except: birthday = '' |
データを格納
取得したデータを格納する。
同時にどれくらい作業が進んでいるかを可視化するようにする。
今回は約10000件のデータがある1件あたり1秒かかったとすると約3時間かかる計算だ。
進行度と経過時間、残り時間を出してみた。
1 2 3 4 5 6 7 8 |
se = pd.Series([name, height, cup, hip, waist, bust, blood_type, birthday], ["name", "height", "cup", "hip", "waist", "bust", "blood_type", "birthday"]) AV_df = AV_df.append(se, ignore_index=True) counter +=1 sec = int(time.time() - start) print('{}% finished, time: {}, {} min remaining'.format(counter//9763*100, sec, sec * (9763/counter -1)//60)) print("completed") |
実はこの進行度はうまく機能しない。
int(counter*100/9763)とするのがいいだろう。
こんな感じで表示される。
最終データをcsv形式でダウンロード
1 2 3 |
from google.colab import files AV_df.to_csv("AV.csv") files.download('AV.csv') |
googlecolab上のデータをcsvに変換してローカルにダウンロードする。
まとめ
参考 scraping_AV.ipynbgithub.com実際に使ったコードを置いておくので参考にしてみてください。
内容は少し違っています。
次はこのデータを使って機械学習の分類をやっていきたいと思います。
ではでは
コメントを残す