Dアニメストアをスクレイピングし、人気アニメランキング作ってみた

qiita.com

requests-htmlで作成してみようと思ったらスクロールの仕方がわからなかったのでrequest見てたらJSONだったので

JSON抽出、dataframeで結合、ランキングに変更

import json
import time

import pandas as pd
import requests

# タイトルの50音順リスト
title = [[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5],
         [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 3, 5],
         [1, 2, 3, 4, 5], [1, 2, 3]]

# URL生成
urls = []

for i, j in enumerate(title, start=1):
    for k in j:
        urls.append(
            'https://anime.dmkt-sp.jp/animestore/rest/WS000108?workTypeList=anime&length=300&mainKeyVisualSize=2&initialCollectionKey={}&consonantKey={}'.
            format(i, k))
print(urls)

headers = {"content-type": "application/json"}
dfs = []

for url in urls:

    r = requests.get(url, headers=headers)
    data = r.json()
    dfs.append(pd.io.json.json_normalize(data['data']['workList']))
    time.sleep(3)

# 結合
df = pd.concat(dfs)

# タイトル数
print(len(df))

# お気に入り数でランキング
df['rank'] = df['workInfo.favoriteCount'].rank(ascending=False, method='min')

# ランキングでソート
df.sort_values(['rank'], inplace=True)

# indexをランキングに変更
df.set_index('rank', inplace=True)

df_rank = df.loc[:, ['workInfo.favoriteCount', 'workInfo.workTitle']]

print(df_rank)