【イベノ】特定のアーティストにおける自分が参加登録したイベントのURLを全取得する【Python】

python

どうも

懐古厨なので「このアーティストの参加したイベントどれだっけ」となるときがあります。

イベンターノートきゅんは自分の参加したイベントのみを表示する機能がないのでpythonで自動で取得するコードを書きました。

注意事項

アーティストのイベント数が多ければ多いほど処理が増えます。
つまりイベンターノートのサーバーに負荷がかかるので、連続で回すとかは控えましょう。

特定のアーティストにおける参加登録したイベントのURLを全取得するコード

import requests
from bs4 import BeautifulSoup

#アーティストのURL
url = r"https://www.eventernote.com/actors/アーティスト名/アーティストID/events"
#user id ↓これ俺のIDなんで自分のに変えてください
username = "Fact_M_Q" 

#特定のアーティストの全イベントのURLを取得する
def checkurl():
    html_text = requests.get(url+"?limit=10000").text
    soup = BeautifulSoup(html_text, 'html.parser')
    ul = soup.select('h4>a[href^="/events/"]')
    return["https://www.eventernote.com"+str(i.get('href'))+"/users?limit=10000" for i in ul]

#URLに自分のuser idがあるかチェックする
def check(n):
    html_text = requests.get(n).text
    soup = BeautifulSoup(html_text, 'html.parser')
    ul =[i.get_text() for i in soup.select('[class="name pre"]')]
    for i in ul:
        if username in i:
            return [n,soup.find('title').text]
        else:pass

#関数を実行し参加したイベントのリストをつくる
je = [check(i)for i in checkurl()]
#リストからNoneをはじく
je = [i for i in je if not i is None]

#リストを日付順で並び替える
je = sorted(je, reverse=False, key=lambda x: x[0])
#リストを1項目ごとに改行しつつプリントする
print(*je,sep='\n')

解説

5行目

ページ移行とかするとURL変わるんで /events で終わるURLを入力するようします

アーティストページを開いて「○○のすべてのイベントを見る」をクリックして出てきたURLを入れれば問題ないはず

10行目

BeautifulSoupを使用してスクレイピングします

すべてのイベントのURLを取得します。正確にはイベントの参加者ページを取得している

イベンターノートは機能としては20項目で改ページされるが、URLで1ページの表示項目数を指定できる。

17行目

BeautifulSoupを使用してスクレイピングします

イベントの参加者ページに指定したIDがあるかチェックしています

27~29行目

forループで1ページずつ確認させます。

その後の処理でNoneタイプがいるとエラーでるのでforループで弾きます。

この処理を非同期にすると速度がかなり改善されますが、アクセス制限とかで止まったりし兼ねないのであえて同期処理にしています。

python