意識高い界隈、最も意識が低い男のブログ。

現社会人一年目。日々の出来事を連ねていくつもりです。見た人を楽しませるような記事を書いていきたいと思っております。仲良くしてください!!

ROCK IN JAPANに向けてアーティスト定番曲を予習する【python】【プログラミング】

こんばんは!takasunです!!

夏ですね。
夏といえばフェスですね。フェスといえば「ROCK IN JAPAN」ですね!!
rijfes.jp

ま、まだ行ったことありませんが。
今年初参戦してきます!!

まずロックインジャパンについて説明しましょう。

茨城県ひたちなか市で毎年開催される、大規模音楽野外フェスティバルです。
4日間にわたり開催され、200組を超えるアーティストが集まるというフェスです。お祭りです。
昨年は、ラッドウィンプス、ゆず、B’zなど、超大物アーティストも登場する激熱ライブとなります。

この通称ロッキンに今年初めて参加するわけですが、仕事の都合上2日間しか参加できませんでした。
しかも8/11, 12というお盆もいいところっていう。
混み混みだろうなと思いつつ覚悟をして行ってきます!


んで、タイトルにある通りですよ。これ大事。
先程も説明しましたように、なんと4日間で200組程が出演するので、
タイムテーブルを見ながら、何時にどのアーティストを聴きに行くかというタイムマネジメントが重要になってきます。
それだけでなく、どのアーティストにおいても、ライブ定番曲を押さえておくことは、
ライブを最高に楽しむための必要十分条件になるのではないかと私思っております!

そこで、前回の記事でも説明していたプログラミング言語pythonを使用して、
アーティストごとの定番曲上位5曲をエクセルにまとめていきたいと思います!

おおざっぱなイメージとしては以下のようになります。




1.ロックインジャパン2018のHPにアクセスする
f:id:tksn8240:20180731235535p:plain
2.アーティストページから、出演予定アーティスト名を確保する
f:id:tksn8240:20180731235536p:plain
3.ライブファンズのHPにアクセスしする
f:id:tksn8240:20180731235537p:plain
5.右側にある定番ソングにアクセスし上位5曲を確保する
f:id:tksn8240:20180731235538p:plain
6.エクセルにまとめる
f:id:tksn8240:20180731235540p:plain


っていうかんじですね。
これで短時間で大量のアーティストの定番ソングをまとめることに成功しました。
自動化って大切ですね。

ちなみに以下がソースコードです。



from urllib import request as req
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from time import sleep
import csv

# ロックインジャパン,ライブファンのURL設定
# daysには日付を記入(0804, 0805, 0811, 0812)
url_fes = "http://rijfes.jp/2018/artist"
url_livefan = "http://www.livefans.jp/"
days = ["0811", "0812"]

# 出力ファイルを初期化
with open('Rock_urllib.csv', 'w+', newline='') as f:
    writer = csv.writer(f)

# ファイルへの書き込み関数
def write_csv(msg):
    with open('Rock_urllib.csv', 'a', newline='') as f:
        writer = csv.writer(f)
        writer.writerow(msg)

# HTML解析
r = req.urlopen(url_fes)
soup = BeautifulSoup(r, "html.parser")

# ライブファンのURL遷移のためブラウザを起動
browser = webdriver.Chrome()

for day in days:
    # 日付を書き込み
    write_csv([day])
    # アーティストの抽出
    day_list = soup.find_all('ul', class_="artist_list js-tab js-tab-{}".format(day))
    artist_list = day_list[0].find_all('span', class_="artist_list_name")
    artists = []
    for li in artist_list:
        artists.append(li.string)
    for artist in artists:
        print(artist)
        # 参加アーティストのライブ手番ソング上位5曲を選定
        browser.get(url_livefan)
        browser.find_element_by_name("keyword").send_keys(artist)
        sleep(1)
        browser.find_element_by_id("seach_btn").click()
        sleep(1)
        browser.find_element_by_xpath('//*[@id="schBox"]/div[2]/h3/a').click()
        sleep(1)
        # ライブへの出演経験が十分か
        # 不十分な場合はライブ定番ソングというリンクが作成されないためexcept処理
        try:
            browser.find_element_by_xpath('//*[@id="teibanBox"]/div/div/div/a').click()
            for num in range(1,10,2):
                # 曲名と演奏率の確保
                title    = browser.find_element_by_xpath('//*[@id="songBox"]/div[3]/table[{0}]/tbody/tr/td[2]/a'.format(num)).text
                playrate = browser.find_element_by_xpath('//*[@id="songBox"]/div[3]/table[{0}]/tbody/tr/td[3]/span'.format(num)).text
                play = ''
                play += playrate[:-1]
                # csvファイルへ追記
                # 「アーティスト名,曲名,演奏率」の順
                artist=artist.replace('\xe1', 'a')
                write_csv([artist,title,play])
        except NoSuchElementException:
            pass

# 作業終了
browser.quit()
print("Done")


こんなんです!
これでアーティストごとの定番ソングが分かりました!

あとは予習するだけですね。2週間切っていますが・・・