Qiita Advent CalendarのランキングをPythonでスクレイピングしてみた
QiitのAdvent Calenderには、ランキングが公開されてます。
全体カレンダーランキング
最初は、面白カレンダーを見つけることが目的でちょいちょい見てましたが、よくよく見てみると、弊社もランキングされてました!
ただし、いいね数が1でもランキングされているので、まあ当然なんですけどね。
ランキングされていることを知ってから、「今日のランキングは何位かな?」を初めて3日目。
これは面倒くさい・・・
「QiitaにAPIがあるから、それでランキング取れるやろ」と、ランキング取得を自動化することにしました
APIがないならスクレイピング!
QiitaにはAPIがあります。ここです→Qiita API v2の仕様
しかし、ドキュメント見ても、Advent CalenderのAPIが無い
APIが無いならPythonでスクレイピングしてみることにしました。
Python スクレイピング
で検索すると、Beautiful Soupが多くヒットしましたので、Beautiful Soupを使うことにしました。
スクレイピングは簡単だ
目的は明確です。自分の会社のランキングを取得することです。HTMLタグを調べて見ました。
ランキングの数字を取得するには、カレンダーリンクの<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日でした
FORK Advent Calendar 2019
私が書いたAdvent Calenderの記事はこちらです
Author And Source
この問題について(Qiita Advent CalendarのランキングをPythonでスクレイピングしてみた), 我々は、より多くの情報をここで見つけました https://qiita.com/izanari/items/0cb8624a931695bcdeb2著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .