LoginSignup
7
0

More than 3 years have passed since last update.

Qiita Advent CalendarのランキングをPythonでスクレイピングしてみた

Posted at

QiitのAdvent Calenderには、ランキングが公開されてます。
全体カレンダーランキング

最初は、面白カレンダーを見つけることが目的でちょいちょい見てましたが、よくよく見てみると、弊社もランキングされてました!:clap::clap:

image.png

ただし、いいね数が1でもランキングされているので、まあ当然なんですけどね。

ランキングされていることを知ってから、「今日のランキングは何位かな?」を初めて3日目。
これは面倒くさい・・・

「QiitaにAPIがあるから、それでランキング取れるやろ」と、ランキング取得を自動化することにしました

APIがないならスクレイピング!

QiitaにはAPIがあります。ここです→Qiita API v2の仕様
しかし、ドキュメント見ても、Advent CalenderのAPIが無い:sob:

APIが無いならPythonでスクレイピングしてみることにしました。
Python スクレイピングで検索すると、Beautiful Soupが多くヒットしましたので、Beautiful Soupを使うことにしました。

スクレイピングは簡単だ

目的は明確です。自分の会社のランキングを取得することです。HTMLタグを調べて見ました。

スクリーンショット 2019-12-12 19.04.29.png

ランキングの数字を取得するには、カレンダーリンクの<a class="adventCalendarRankingListItem_calendarName">から2個上に昇ってテキストを取得すればよさそうです。

BeautifulSoupを使ってコードにしてみました。

from urllib import request
from bs4 import BeautifulSoup

targethref = '/advent-calendar/2019/fork'

def main():

    url = 'https://qiita.com/advent-calendar/2019/ranking/feedbacks/all'
    targetclass = 'adventCalendarRankingListItem_calendarName'

    response = request.urlopen(url)
    soup = BeautifulSoup(response,features="html.parser")
    ranking = soup.find('a',class_=targetclass,href=targethref).parent.parent.contents[0].text
    response.close()

    print(ranking)


if __name__ == "__main__":
    main()

これだけです、とっても簡単です!
BeautifulSoup 素晴らしい!(スクレイピングできる他のライブラリを知らないので、自分の感覚です)

自分の好きなカレンダーのランキングを取得したい場合は、4行目のtargethref=を書き換えてください。

おわりに

このロジックをAWS Lambdaにのっけて、1日1回実行してます。実行した結果は、社内のChatツールに投げて情報を共有するようにしました。

APIが公開されてなくても、スクレイピングでもいけるなと認識した1日でした:sunny:


:fork_and_knife: FORK Advent Calendar 2019
私が書いたAdvent Calenderの記事はこちらです

7
0
0

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
7
0