2
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Beautifulsoupを使って、簡単に今期(2019年冬)アニメランキングを作ってみた

Last updated at Posted at 2019-01-20

はじめに###

巷ではよく今期アニメランキングを発表していますが、どうも納得がいかないことが多いと聞きます。例えば、このサイトでは、
1位 バーチャルさんはみている
2位 転生したらスライムだった件
3位 けものフレンズ2
4位 かぐや様は告らせたい
5位 五等分の花嫁
https://anime.nicovideo.jp/ranking/view-total.html?from=nanime_rank-view-daily_rank

LXUsI0mUYlobBX61548023770_1548023789.png

他のアニメは「まあまあ正しいのかな」としても、「バーチャルさんはみている」が1位というのは、おかしいような気もします。

勿論、アクセス数で測っているので有料枠などはアクセス数が低くなることは必然でしょう。アニメをインターネットで生配信しているか否かもアクセス数が違う原因になります。現に今期人気アニメの「約束のネバーランド」は30~14位をウロウロしています。

よってこのランキングを参考に、「どのアニメが人気なのか」を判断することは出来ません。このランキングは、あくまで「このサイトで、どれくらいアクセス数があったのか」ということでしかないのです。

よってとりあえず今期は何が人気なのかを判断して、3話ぐらい見てから切るか考えようという人にとっては、このランキングはあまり役に立たないでしょう。

そこで色々調べたところ、このサイトがランキングとして使えそうだと考えました。
MyAnimeList  https://myanimelist.net/anime/season

理由としては、レヴュー数が5万~16万と圧倒的に多く、ランキングの基準を「アクセス数」ではなく、「作品の評価」(10段階)で決めているからです。10段階であれば、より作品の面白さで点数に差がつくので、繊細なランキングができることでしょう。欠点は外国人がレビューしていることですが、見たところ、日本で人気なものは、大体海外でも人気なようなので、大丈夫だと判断しました。

(補足:Crunchyrollも考えましたが、作品数がいくつか欠けており、5段階評価で、レヴュー数も少なかった(50~600ぐらい)で少なかったので辞めました。)
https://www.crunchyroll.com/videos/anime/seasons/winter-2019

実際にやってみる###

ウェブスクレイピングは初めてだったので、このくらいの難易度は丁度良かったように思えます。
(2019/01/25 shiracamusさんのご指摘でコードをアップデートしました。)

from urllib.request import urlopen
from bs4 import BeautifulSoup as soup


def download(url='https://myanimelist.net/anime/season'):
    http = urlopen(url)
    html = soup(http, 'html.parser')

    # 今期のアニメだけを取るためにhtmlの「今期」の部分だけを抽出
    containers = html.find("div", class_="seasonal-anime-list js-seasonal-anime-list js-seasonal-anime-list-key-1 clearfix")

    # スコアとタイトルを抽出・産出
    titles = containers.findAll("a", class_="link-title")
    scores = containers.findAll("span", class_="score")
    for title, score in zip(titles, scores):
        title = title.text
        score = score.text.strip()
        score = float(score if score != 'N/A' else '0')  # 無評価(N/A)は0.0
        yield score, title


def show_ranking(score_titles):
    ranking = sorted(score_titles, reverse=True)
    for rank, (score, title) in enumerate(ranking, 1):
        line = ' {:<2}  {:<60}  {:<3}'.format(rank, title, score)
        print(line)

if __name__ == '__main__':
    show_ranking(download())

結果
9EecRuYTHrgHIWX1548023398_1548023416.png

1位 モブサイコ100 二期
1位 約束のネバーランド (2位と書いてあるが同率1位)
3位 盾の勇者の成り上がり
4位 どろろ
5位 かぐや様は告らせたい

結果、小点数第2位まで表しているのにも関わらず、なんとモブサイコ100の2期と約束のネバーランドが、同点になりました!1位であった「バーチャルさんはみている」は36位へ(好きな人、侮辱しているわけではないです。すみません。)

その他のアニメもかなり違う結果となりました。(ちなみに転スラ等、前から続いているアニメは入っていません。評価が無かったアニメも0点としています。)

他にも同点が2つあり、「五等分の花嫁」と「ドメスティックな彼女」は0.03の違いでかなり近い結果となりました。

勿論、このランキングは殆ど外国人が付けているので、「日本人だけに通じるネタは外国人には分からない」など懸念も多々ありますが、アニメを多く見ている人なら、このランキングを見て納得する方も多いのではないでしょうか。

これだったら、一、二話での評価をサクッと見て、人気が無いアニメを捨てて人気が高いものに絞って見ることができます。

2
10
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?